簡體   English   中英

使用嵌套從 JSON 中提取值

[英]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]

我以為我可以用#>類的簡單運算符解決所有問題,但我失敗了。 也許有必要通過一個循環來做? 先感謝您!

點擊:分步演示:db<>fiddle

SELECT
    jsonb_agg(elems -> 'id_ref_directory')
FROM mytable,
    jsonb_array_elements(mydata -> 'territory_custom') AS elems
  1. jsonb_array_elements()為每個數組元素提供一行
  2. elems -> 'id_ref_directory'為您提供這些元素的預期值
  3. jsonb_agg()將它們聚合成一個 JSON 數組

如果你想要一個int數組:

SELECT
    array_agg((elems ->> 'id_ref_directory')::int)
FROM mytable,
    jsonb_array_elements(mydata -> 'territory_custom') AS elems
  1. 在將元素轉換為int值后,使用array_agg()代替jsonb_agg()

Postgres 12允許使用 JSONpath:

點擊:demo:db<>fiddle

SELECT
    jsonb_path_query_array(mydata, '$.territory_custom.id_ref_directory') elems
FROM mytable
  1. '$.territory_custom.id_ref_directory'為您提供所有預期元素
  2. 該函數將結果聚合到一個數組中

如果你想要一個int數組:

SELECT
    array_agg(elems::int)
FROM mytable,
    jsonb_path_query(mydata, '$.territory_custom.id_ref_directory') elems
  1. 每個元素將所有元素計算為一行
  2. 將這些元素轉換為int值后,使用array_agg()聚合這些元素

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM