[英]How to get Array of JSON from SQL select
我想在我的 SQL 選擇中獲取一組對象。
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
我得到這個回應:
[
{ 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' }
]
有可能得到這樣的東西嗎?
[
{ 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'}] },
]
使用 json_build_object 和 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
有點生疏,但試試這個:
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;
更新:以上不適用於 SQLite。 對於 SQLite,您應該在此處查看 json1 擴展: https ://www.sqlite.org/json1.html
另一個更新:它可以在沒有 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
這里有一個小問題:顏色列/節點被視為字符串而不是數組......這是正常的,因為 sqlite 不支持數組類型的列。 需要進行一些解析才能從字符串轉換為數組...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.