我们如何将 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

能够在子查询中提取相关的数组元素。

Demo