Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara menghasilkan objek json bersarang menggunakan fungsi json asli mysql?

Alasan Anda mendapatkan kesalahan ini adalah karena objek json induk tidak mengharapkan hasil yang ditetapkan sebagai salah satu inputnya, Anda harus memiliki pasangan objek sederhana seperti {name, string} etc laporan bug - mungkin tersedia di fungsionalitas mendatang ... ini hanya berarti bahwa Anda perlu mengonversi hasil multi-baris menjadi rangkaian hasil yang dipisahkan dengan koma dan kemudian diubah menjadi larik json.

Anda hampir mendapatkannya dengan contoh kedua Anda.

Anda dapat mencapai apa yang Anda cari dengan fungsi GROUP_CONCAT

select json_object(
  'id',p.id 
 ,'desc',p.`desc`
 ,'child_objects',json_array(
                     (select GROUP_CONCAT(
                                 json_object('id',id,'parent_id',parent_id,'desc',`desc`)
                             )   
                      from child_table 
                      where parent_id = p.id))
                   )
 from parent_table p;

Ini hampir berhasil, akhirnya memperlakukan subquery sebagai string yang meninggalkan karakter escape di sana.

'{\"id\": 1, 
\"desc\": \"parent row 1\", 
\"child_objects\": 
    [\"
    {\\\"id\\\": 1,
     \\\"desc\\\": \\\"child row 1\\\", 
    \\\"parent_id\\\": 1
    },
    {\\\"id\\\": 2, 
    \\\"desc\\\": \\\"child row 2\\\", 
    \\\"parent_id\\\": 1}\"
    ]
}'

Agar ini berfungsi dalam format yang sesuai, Anda perlu mengubah cara Anda membuat output JSON sebagai berikut:

select json_object(
  'id',p.id 
 ,'desc',p.`desc`
 ,'child_objects',(select CAST(CONCAT('[',
                GROUP_CONCAT(
                  JSON_OBJECT(
                    'id',id,'parent_id',parent_id,'desc',`desc`)),
                ']')
         AS JSON) from child_table where parent_id = p.id)

 ) from parent_table p;

Ini akan memberi Anda hasil persis yang Anda butuhkan:

'{\"id\": 1, 
\"desc\": \"parent row 1\", 
\"child_objects\": 
    [{\"id\": 1, 
    \"desc\": \"child row 1\", 
    \"parent_id\": 1
    }, 
    {\"id\": 2, 
    \"desc\": \"child row 2\", 
    \"parent_id\": 1
    }]  
}'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 5 Alat GUI MySQL Teratas (Gratis &Berbayar)

  2. TAMBAHKAN () Contoh – MySQL

  3. Bagaimana Anda menghapus MySQL dari Mac OS X?

  4. Cara Mengonversi Karakter Huruf Kecil ke Huruf Besar di MySQL

  5. Susun ulang / atur ulang kunci utama kenaikan otomatis