我们如何将 json 列表转换为 postgres 中的行?
How we can turn json list into rows in postgres?
我有一个查询 returns 一个 json 列表:
select type.value -> 'components' as json_data
from manifests m left join
jsonb_array_elements(m.json_data->'type') as type on true
这个returns下面的数据
[{"name": "xxx", "version": "1.1"}, {"name": "xxx2", "version": "1.2"}]
如果我将它用作文本,我可以进一步处理它:
select *
from jsonb_array_elements(
'[{"name": "xxx", "version": "1.1"}, {"name": "xxx2", "version": "1.2"}]' )
给予
{"name": "xxx", "version": "1.1"}
{"name": "xxx2", "version": "1.2"}
但是我如何使用第一个查询达到相同的目的?我无法使用子查询使其工作
更新:我的原始数据是这样的:
{
"lastUpdated": 1569393969656,
"type": [
{
"components": [
{
"name": "xxx",
"version": "1.1"
},
{
"name": "xxx2",
"version": "1.2"
}
],
"description": "xxx"
}
]
}
谢谢
您可以应用 jsonb_array_elements()
函数两次 :
select jsonb_array_elements(elm) as json_data
from
(
select jsonb_array_elements(json_data -> 'type') -> 'components' as elm
from manifests ) q
能够在子查询中提取相关的数组元素。
我有一个查询 returns 一个 json 列表:
select type.value -> 'components' as json_data
from manifests m left join
jsonb_array_elements(m.json_data->'type') as type on true
这个returns下面的数据
[{"name": "xxx", "version": "1.1"}, {"name": "xxx2", "version": "1.2"}]
如果我将它用作文本,我可以进一步处理它:
select *
from jsonb_array_elements(
'[{"name": "xxx", "version": "1.1"}, {"name": "xxx2", "version": "1.2"}]' )
给予
{"name": "xxx", "version": "1.1"}
{"name": "xxx2", "version": "1.2"}
但是我如何使用第一个查询达到相同的目的?我无法使用子查询使其工作
更新:我的原始数据是这样的:
{
"lastUpdated": 1569393969656,
"type": [
{
"components": [
{
"name": "xxx",
"version": "1.1"
},
{
"name": "xxx2",
"version": "1.2"
}
],
"description": "xxx"
}
]
}
谢谢
您可以应用 jsonb_array_elements()
函数两次 :
select jsonb_array_elements(elm) as json_data
from
(
select jsonb_array_elements(json_data -> 'type') -> 'components' as elm
from manifests ) q
能够在子查询中提取相关的数组元素。