Cara mendapatkan Array of JSON dari SQL pilih
Aug 31 2020
Saya ingin mendapatkan array objek di dalam SQL pilih saya.
SELECT id, a.name antibodyName, c.name colorName, c.location colorLocation
FROM Antibodies a
JOIN AssignedColors c ON id = antiId
WHERE colorId IS NOT NULL
dan saya mendapatkan tanggapan ini:
[
{ id: 1, antibodyName: 'antibody 1', colorName: 'red', colorLocation: 'A5/C3' },
{ id: 2, antibodyName: 'antibody 2', colorName: 'red', colorLocation: 'C3/A1' },
{ id: 2, antibodyName: 'antibody 2', colorName: 'yellow', colorLocation: 'E4/F2' }
]
apakah mungkin mendapatkan sesuatu seperti ini?
[
{ id: 1, antibodyName: 'antibody 1', colors: [{name: 'red, location: 'A5/C3'}] },
{ id: 2, antibodyName: 'antibody 2', colors: [{name: 'red, location: 'C3/A1'}, {name: 'yellow', location: 'E4/F2'}] },
]
Jawaban
1 MuhammadAhmod Aug 31 2020 at 18:26
agak berkarat, tapi coba ini:
SELECT
a.id AS 'Id',
a.Name AS 'antibodyName',
c.Name AS 'name',
c.location AS 'location'
FROM Antibodies a
LEFT JOIN AssignedColors c ON c.id = a.Id
FOR JSON AUTO;
UPDATE: di atas bukan untuk SQLite. Untuk SQLite, Anda harus memeriksa ekstensi json1 di sini:https://www.sqlite.org/json1.html
PEMBARUAN LAIN: ini dapat dilakukan tanpa ekstensi JSON ...
SELECT
a.id AS 'id',
a.Name AS 'antibodyName',
(SELECT '[' || GROUP_CONCAT('{name:"' || Name || '", location:"' || location || '"}') ||']'
FROM AssignedColors
WHERE c.id=Id) AS colors
FROM Antibodies a
LEFT JOIN AssignedColors c ON c.id = a.id
GROUP BY a.id
Ada masalah kecil di sini: kolom / node warna diperlakukan sebagai string dan bukan array ... ini normal karena sqlite tidak mendukung kolom bertipe array. beberapa parsing perlu dilakukan untuk mengonversi dari string ke array ...
1 sheharbano Aug 31 2020 at 18:14
Gunakan json_build_object dan array_agg.
WITH foobar AS (
SELECT id, a.name antibodyName, c.name colorName, c.location colorLocation
FROM Antibodies a JOIN AssignedColors c
ON id = antiId WHERE colorId IS NOT NULL
)
SELECT
json_build_object('data',array_agg(json_build_object('id', id, 'antibodyName', antibodyName, 'colorName', colorName, 'colorLocation', colorLocation))
FROM
foobar
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'