Как мы можем превратить список JSON в строки в Postgres? - PullRequest
0 голосов
/ 27 сентября 2019

у меня есть запрос, который возвращает список json:

 select type.value -> 'components' as json_data
   from manifests m left join
        jsonb_array_elements(m.json_data->'type') as type on true   

, это возвращает следующие данные

[{"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"
        }
    ]
}

спасибо

1 Ответ

1 голос
/ 27 сентября 2019

Вы можете применить 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

, чтобы иметь возможность извлечь связанные элементы массива в подзапросе.

Демо

...