выберите столбец JSON массивов и покажите элементы как новые столбцы - PullRequest
1 голос
/ 25 апреля 2020

У меня есть Postgres БД со столбцом, в котором есть значение JSON для значения в каждой строке.

Пример:

id | json_data
1  | [{"sub_id":"a1", "flag":"true", "type":"something"}, {"sub_id":"a2", "flag":"true", "type":"something"}]
2  | [{"sub_id":"b1", "flag":"false", "type":"something"}, {"sub_id":"b2", "flag":"false", "type":"something"}]
3  | [{"sub_id":"c1", "flag":"true", "type":"something"}]

Я хочу иметь возможность создать новый взгляд, чтобы я мог взаимодействовать с данными, структурированными так:

id | sub_id | flag  | type
1  | a1     | true  | something
1  | a2     | true  | something
2  | b1     | false | something
2  | b2     | false | something
3  | c1     | true  | something

Возможно, что-то не так из документации Postgres. Похоже, мне нужно использовать json_array_elements, но вся документация и связанные с ней примеры, которые я вижу, показывают, что JSON передается в виде строки этой функции.

Как мне использовать это для каждой строки данного столбца?

1 Ответ

2 голосов
/ 25 апреля 2020

Вам нужно отменить ввод с помощью jsonb_array_elements, затем вы можете получить доступ к каждому ключу:

select t.id, 
       j.e ->> 'sub_id' as sub_id,
       j.e ->> 'flag' as flag,
       j.e ->> 'type' as type
from the_table t
  cross join jsonb_array_elements(t.json_data::jsonb) as j(e)
order by t.id;

Это предполагает, что ваш столбец определен как jsonb (что и должно быть). Если это просто json, вам нужно использовать json_array_elements()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...