我刚刚意识到在我的 AWS Aurora postgres 集群上,具有 temp_tables 功能的函数对只读副本不友好。我需要重写(使用 CTE)- 无论如何......我如何使用嵌套数组的 json 对象并将它们展平到一个表中,如下所示:
{
"data": [
{
"groupName": "TeamA",
"groupCode": "12",
"subGroupCodes": [
"11"
]
},
{
"groupName": "TeamB",
"groupCode": "13",
"subGroupCodes": [
"15", "22"
]
}
]
}
我希望输出表是:
groupName groupCode subGroupCodes
TeamA 12 11
TeamB 13 15
TeamB 13 22
我知道我可以通过以下方式完成大部分工作:
SELECT j."groupCode" as int, j."groupName" as pupilgroup_name
FROM json_to_recordset(p_in_filters->'data') j ("groupName" varchar(50), "groupCode" int)
但我只需要获取子组代码,但解包数组并加入正确的父组代码。
最佳答案
需要先unnest数组,然后再unnest得到子组代码:
with data (j) as (
values ('{
"data": [
{
"groupName": "TeamA",
"groupCode": "12",
"subGroupCodes": [
"11"
]
},
{
"groupName": "TeamB",
"groupCode": "13",
"subGroupCodes": [
"15", "22"
]
}
]
}'::jsonb)
)
select e ->> 'groupName' as group_name,
e ->> 'groupCode' as code,
sg.*
from data d
cross join lateral jsonb_array_elements(d.j -> 'data') as e(g)
cross join lateral jsonb_array_elements_text(g -> 'subGroupCodes') as sg(subgroup_code)
关于json - 如何将json压平成表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56901263/