#json #postgresql #jsonb
#json #postgresql #jsonb
Вопрос:
У меня есть столбец jsonb в моей таблице postgres, и данные заполняются и хранятся в нем.
Вот примерный формат данных, которые хранятся в столбце jsonb
{
"unknown_value1": {
"code": "code 1",
"title": "sample title 1",
"parent_title": "parent1",
"framework_code": "ABC"
},
"unknown_value2": {
"code": "code 2",
"title": "sample title 2",
"parent_title": "parent2",
"framework_code": "ABC"
}
}
Теперь мне нужно извлечь все значения из ключа ‘parent_title’ без указания самого внешнего ключа (unknown_value1, unknown_value2).
Самые внешние ключи неизвестны, это может быть любое значение, изменения для каждого данные.
Но ключ внутри json (code, title, parent_title и framework_code) является постоянным, он не изменится ни для какого значения.
Помогите мне извлечь эти данные jsonb.
Заранее спасибо!
Ответ №1:
Используйте каскадное jsonb_each()
соединение в боковом соединении:
with data(json_value) as (
values (
'{
"unknown_value1": {
"code": "code 1",
"title": "sample title 1",
"parent_title": "parent1",
"framework_code": "ABC"
},
"unknown_value2": {
"code": "code 2",
"title": "sample title 2",
"parent_title": "parent2",
"framework_code": "ABC"
}
}'::jsonb)
)
select j1.key as outer_key, j2.key, j2.value
from data
cross join lateral jsonb_each(json_value) j1
cross join lateral jsonb_each(value) j2
outer_key | key | value
---------------- ---------------- ------------------
unknown_value1 | code | "code 1"
unknown_value1 | title | "sample title 1"
unknown_value1 | parent_title | "parent1"
unknown_value1 | framework_code | "ABC"
unknown_value2 | code | "code 2"
unknown_value2 | title | "sample title 2"
unknown_value2 | parent_title | "parent2"
unknown_value2 | framework_code | "ABC"
(8 rows)