如何提取 JSONB 数组的元素?
How to extract elements of a JSONB array?
运行 PostgresSQL v10.5.
在我的 table table_a
中,有一列 metadata
是 jsonb
.
类型
它有一个 JSON 数组作为它的键之一 array_key
,其值如下所示:
[{"key1":"value11", "key2":"value21", "key3":"value31"},
{"key1":"value21", "key2":"value22", "key3":"value23"}]
这就是我查询这个键的方式
SELECT metadata->>'array_key' from table_a
这给了我整个数组。有什么方法可以只查询选定的键并格式化它们吗?
数组的类型是文本即pg_typeof(metadata->>'array_key')
是text
理想的输出是
"value11, value13", "value21, value23"
使用jsonb_array_elements()
获取数组元素(如value
),可以通过键过滤:
select value->>'key1' as key1, value->>'key3' as key3
from table_a
cross join jsonb_array_elements(metadata->'array_key');
key1 | key3
---------+---------
value11 | value31
value21 | value23
(2 rows)
使用聚合将输出作为每行的单个值,例如:
select string_agg(concat_ws(', ', value->>'key1', value->>'key3'), '; ')
from table_a
cross join jsonb_array_elements(metadata->'array_key')
group by id;
string_agg
------------------------------------
value11, value31; value21, value23
(1 row)
运行 PostgresSQL v10.5.
在我的 table table_a
中,有一列 metadata
是 jsonb
.
它有一个 JSON 数组作为它的键之一 array_key
,其值如下所示:
[{"key1":"value11", "key2":"value21", "key3":"value31"},
{"key1":"value21", "key2":"value22", "key3":"value23"}]
这就是我查询这个键的方式
SELECT metadata->>'array_key' from table_a
这给了我整个数组。有什么方法可以只查询选定的键并格式化它们吗?
数组的类型是文本即pg_typeof(metadata->>'array_key')
是text
理想的输出是
"value11, value13", "value21, value23"
使用jsonb_array_elements()
获取数组元素(如value
),可以通过键过滤:
select value->>'key1' as key1, value->>'key3' as key3
from table_a
cross join jsonb_array_elements(metadata->'array_key');
key1 | key3
---------+---------
value11 | value31
value21 | value23
(2 rows)
使用聚合将输出作为每行的单个值,例如:
select string_agg(concat_ws(', ', value->>'key1', value->>'key3'), '; ')
from table_a
cross join jsonb_array_elements(metadata->'array_key')
group by id;
string_agg
------------------------------------
value11, value31; value21, value23
(1 row)