[英]Extract values from JSON with nesting
我在获取“id_ref_directory”键下的所有值时遇到问题。
我有一个临时表:
CREATE LOCAL TEMP TABLE parsed_json(
var_key text,
var_value text NOT NULL)
ON COMMIT DROP;
我有一个 JSON,在临时表中:
INSERT INTO parsed_json(var_key, var_value)
SELECT *
FROM json_each_text(var_in_json::json)
WHERE value IS NOT NULL and LENGTH(value) != 0;
我有 var int[]:
var_territory_list := (SELECT var_value FROM parsed_json WHERE var_key = 'territory_custom');
我在“值”字段中有这样的 JSON:
[{"name_directory": "ЯПОНИЯ", "id_ref_directory": 38},
{"name_directory": "ЯПОН", "id_ref_directory": 39},
{"name_directory": "ЯП", "id_ref_directory": 40}]}
我需要写入var_territory_list
从JSON这个abowe(键的值“id_ref_directory”):
[38, 39, 40]
我以为我可以用#>
类的简单运算符解决所有问题,但我失败了。 也许有必要通过一个循环来做? 先感谢您!
SELECT
jsonb_agg(elems -> 'id_ref_directory')
FROM mytable,
jsonb_array_elements(mydata -> 'territory_custom') AS elems
jsonb_array_elements()
为每个数组元素提供一行elems -> 'id_ref_directory'
为您提供这些元素的预期值jsonb_agg()
将它们聚合成一个 JSON 数组如果你想要一个int
数组:
SELECT
array_agg((elems ->> 'id_ref_directory')::int)
FROM mytable,
jsonb_array_elements(mydata -> 'territory_custom') AS elems
int
值后,使用array_agg()
代替jsonb_agg()
Postgres 12允许使用 JSONpath:
SELECT
jsonb_path_query_array(mydata, '$.territory_custom.id_ref_directory') elems
FROM mytable
'$.territory_custom.id_ref_directory'
为您提供所有预期元素如果你想要一个int
数组:
SELECT
array_agg(elems::int)
FROM mytable,
jsonb_path_query(mydata, '$.territory_custom.id_ref_directory') elems
int
值后,使用array_agg()
聚合这些元素
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.