select 或在 postgres 中提取 jsonb 数据中的所有键值
select or extract all key values inside a jsonb data in postgres
我的 postgres table 中有一个 jsonb 列,数据已填充并存储在其中。
这是存储在 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 and framework_code) 中的键是不变的,它不会因任何值而改变。
帮我提取这个jsonb数据。
提前致谢!
在横向连接中使用级联 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)
我的 postgres table 中有一个 jsonb 列,数据已填充并存储在其中。
这是存储在 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 and framework_code) 中的键是不变的,它不会因任何值而改变。
帮我提取这个jsonb数据。
提前致谢!
在横向连接中使用级联 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)