Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menjana Objek JSON Bersarang daripada Hubungan Satu-ke-Banyak dalam MySQL?

Bagaimana untuk Menjana Objek JSON Bersarang daripada Hubungan Satu-ke-Banyak dalam MySQL?

Barbara Streisand
Lepaskan: 2024-12-13 07:59:10
asal
141 orang telah melayarinya

How to Generate Nested JSON Objects from One-to-Many Relationships in MySQL?

Menjana Objek JSON Bersarang dengan Fungsi JSON Asli MySQL

Artikel ini menunjukkan cara menggunakan fungsi JSON asli MySQL versi 5.7.12 untuk membina bersarang Dokumen JSON yang mewakili perhubungan satu-ke-banyak dalam perhubungan data.

Pernyataan Masalah

Diberikan dua jadual, parent_table dan child_table, yang mewakili hubungan ibu bapa-anak, matlamatnya adalah untuk menjana dokumen JSON dengan yang berikut struktur:

[
    {
        "id": 1,
        "desc": "parent row 1",
        "child_objects": [
            {
                "id": 1,
                "parent_id": 1,
                "desc": "child row 1"
            },
            {
                "id": 2,
                "parent_id": 1,
                "desc": "child row 2"
            }
        ]
    }
]
Salin selepas log masuk

Penyelesaian

Pada mulanya, percubaan untuk mencipta objek JSON bersarang menggunakan subquery bersarang mudah mengakibatkan ralat kerana MySQL menjangkakan pasangan objek mudah dalam induk objek JSON. Untuk menyelesaikan masalah ini, kami menggunakan fungsi GROUP_CONCAT untuk menggabungkan berbilang hasil subkueri ke dalam satu rentetan, dan kemudian menukar hasil itu menjadi tatasusunan JSON.

Walau bagaimanapun, output JSON yang terhasil mengandungi aksara melarikan diri disebabkan oleh perlakuan subkueri sebagai seutas tali. Untuk membetulkannya, kami menggunakan fungsi CAST dan CONCAT untuk mencipta tatasusunan JSON dalam subkueri secara langsung, dan bukannya bergantung pada penggabungan dalam pertanyaan utama.

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;
Salin selepas log masuk

Pertanyaan ini menghasilkan output yang diingini:

'{\"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
    }]  
}'
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menjana Objek JSON Bersarang daripada Hubungan Satu-ke-Banyak dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan