簡體   English   中英

使用鍵和值 postgresql 將兩個 Json arrays 連接到一個

[英]Join two Json arrays to one with key and value postgresql

我有兩個 jsonb 列(鍵、值)。 例如:鍵列值 = ["key1","key2","key3","key4"]值列 = ["val1","val2","val3","val4"]

我想根據數組索引編寫一個 select 查詢以獲取如下 output。

{"key1":"val1","key2":"val2","key3":"val3","key4":"val4"}

問題是數組大小不會固定。 每行包含不同的大小。 但是鍵和值列大小將始終相同。

你正在尋找的是json_array_elements function 來分解 JSON 和json_agg來重新壓縮它們

我復制了你的案例

create table jsonb_test (a jsonb, b jsonb);
insert into jsonb_test values ('["key1","key2","key3","key4"]','["val1","val2","val3","val4"]');

解決問題的查詢是

with row_tbl as (
select 
 replace(cast(json_array_elements(a::json) as varchar),'"','') k, 
 replace(cast(json_array_elements(b::json) as varchar),'"','') v
from jsonb_test)

select json_agg(
json_build_object(k,v)) as complete_json
from row_tbl
;

分步演示:db<>fiddle e

SELECT
    json_object_agg(                                       -- 3
        keys ->> gs,                                       -- 2
        vals -> gs                                         
    )
FROM 
    mytable,
    generate_series(0, json_array_length(keys) - 1) as gs  -- 1
  1. 創建用於訪問數組元素的索引。 為此:計算鍵的元素( json_array_length() )並生成索引系列。
  2. 現在您可以使用創建的索引來訪問keysvalues
  3. 通過聚合提取的鍵/值對創建一個新的 JSON object

暫無
暫無

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

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