从 Postgres 中的 JSONB 中提取多个值
Extract multiple values from JSONB in Postgres
我有一个 table 看起来像这样:
id
attrs
1
{"a":{"kind":"kind_1", "value":"val_1"}, "b":{"kind":"kind_2", "value":"val_2"}
2
{"c":{"kind":"kind_3", "value":"val_1"}}
3
{"a":{"kind":"kind_1", "value":"val_1"}, "d":{"kind":"kind_4", "value":"val_4"}, .....
我想提取所有唯一的 value
,所以输出将是:
val_1
val_2
val_4
...
我尝试使用 jsonb_each
方法,但没有成功
您可以使用 JSON 路径查询:
select distinct v.item #>> '{}'
from the_table t
cross join jsonb_array_elements(jsonb_path_query_array(t.attrs, '$.**.value')) as v(item);
v.item #>> '{}'
是将标量 JSON 值转换为 text
的技巧(因为强制转换不起作用)
或者您可以使用 jsonb_each() 两次:
select distinct v.value
from the_table t
cross join jsonb_each(t.attrs) as i(key, item)
cross join jsonb_each_text(i.item) as v(key, value)
where v.key = 'value'
我有一个 table 看起来像这样:
id | attrs |
---|---|
1 | {"a":{"kind":"kind_1", "value":"val_1"}, "b":{"kind":"kind_2", "value":"val_2"} |
2 | {"c":{"kind":"kind_3", "value":"val_1"}} |
3 | {"a":{"kind":"kind_1", "value":"val_1"}, "d":{"kind":"kind_4", "value":"val_4"}, ..... |
我想提取所有唯一的 value
,所以输出将是:
val_1 |
val_2 |
val_4 |
... |
我尝试使用 jsonb_each
方法,但没有成功
您可以使用 JSON 路径查询:
select distinct v.item #>> '{}'
from the_table t
cross join jsonb_array_elements(jsonb_path_query_array(t.attrs, '$.**.value')) as v(item);
v.item #>> '{}'
是将标量 JSON 值转换为 text
的技巧(因为强制转换不起作用)
或者您可以使用 jsonb_each() 两次:
select distinct v.value
from the_table t
cross join jsonb_each(t.attrs) as i(key, item)
cross join jsonb_each_text(i.item) as v(key, value)
where v.key = 'value'