【发布时间】:2021-08-16 14:55:03
【问题描述】:
我的 json 看起来像这样:-
{"DestinationLists": [{"name": "TVNZ, Mediaworks, Choice", "destinations": []}, { "name": "TVNZ, Discovery", "destinations": [165, 183, 4155]}]}
我想要的输出是数组中每个对象的一行,例如:-
{"name" : "TVNZ, Mediaworks, Choice", "destinations" : []}
{"name" : "TVNZ, Discovery", "destinations" : [{"Id" : 165}, {"Id" : 183}, {"Id" : 4155}]}
我的查询是这样的:-
WITH ExpandedData AS (
SELECT
"Id",
setting,
json_build_object(
'name',
dl->>'name',
'destinations',
json_agg(
json_build_object('Id',dld::text::int)
)
) as DestinationListItem
FROM
feature.settings,
jsonb_array_elements(value->'DestinationLists') dl,
jsonb_array_elements(dl->'destinations') dld
GROUP BY
"Id",dl->>'name'
)
select * from ExpandedData
但是这个查询缺少destinations,其中数组为空,所以我从查询中得到的结果是:-
{"name" : "TVNZ, Discovery", "destinations" : [{"Id" : 165}, {"Id" : 183}, {"Id" : 4155}]}
只有一排而不是两排。如何更新此查询以获得所需的结果?
DBFiddle 在这里:- https://www.db-fiddle.com/f/tDA7SajDoWhXrQaAa1j2qN/0
编辑:我已经能够进一步深入研究我的问题,所以问题基本上是从查询的这一行发生的:-
jsonb_array_elements(dl->'destinations') dld
基本上,当destinations 数组为空时,jsonb_array_elements 不会返回任何内容,所以我猜这里正确的解决方案是在将一个空数组传递给它时以某种方式从jsonb_array_elements 返回一个空数组。
【问题讨论】:
-
你能准备一个 DBfiddle 吗?
-
嗨,用 DB fiddle @IVOGELOV 更新了我的问题
-
这个answer 回答你的问题了吗?
标签: sql json postgresql