У меня есть таблица Postgres с таким содержимым:
id | data
1 | {"a":"4", "b":"5"}
2 | {"a":"6", "b":"7"}
3 | {"a":"8", "b":"9"}
Первый столбец является целым числом, а второй - столбцом json.
Я хочу иметь возможность расширять ключи и значения из json, чтобы результат выглядел так:
id | key | value
1 | a | 4
1 | b | 5
2 | a | 6
2 | b | 7
3 | a | 8
3 | b | 9
Можно ли этого добиться в Postgres SQL?
Что я пробовал
Учитывая, что исходную таблицу можно смоделировать как таковую:
select *
from
(
values
(1, '{"a":"4", "b":"5"}'::json),
(2, '{"a":"6", "b":"7"}'::json),
(3, '{"a":"8", "b":"9"}'::json)
) as q (id, data)
Я могу получить только ключи, используя:
select id, json_object_keys(data::json)
from
(
values
(1, '{"a":"4", "b":"5"}'::json),
(2, '{"a":"6", "b":"7"}'::json),
(3, '{"a":"8", "b":"9"}'::json)
) as q (id, data)
И я могу получить их в виде наборов записей вот так:
select id, json_each(data::json)
from
(
values
(1, '{"a":"4", "b":"5"}'::json),
(2, '{"a":"6", "b":"7"}'::json),
(3, '{"a":"8", "b":"9"}'::json)
) as q (id, data)
Но я не могу понять, как добиться результата с помощью идентификатора, ключа и значения.
Любые идеи?
Примечание: настоящий json, с которым я работаю, значительно более вложен, чем этот, но я думаю, что этот пример хорошо отражает мою основную проблему.
json_object_keys
илиjson_each
как таблицу, а не как столбец:select id, j.key, j.value from my_table, json_each(data) j
- person Abelisto   schedule 18.08.2016