在 JSON 中讀取陣列元素

- 使用 ARRAY 建立示例 JSON

create table car_sample(dim_id integer,info varchar(2000)); 插入 car_sample 值(200,’{cars:[{製造商日產模型:[{名稱Sentra:4},{名稱:“千里馬“,”門“:4}]},{”製造商“:”福特“,”模特“:[{”姓名“:”金牛座“,”門“:4},{”姓名“:”護送“ ,:4}]}]}’)

- 為 CROSS JOIN 建立支援表

create table series1_10(數字整數);
插入到 series1_10 的值(1);
插入 series1_10 值(2);
插入 series1_10 values(3);
插入 series1_10 values(4);
插入 series1_10 values(5);
插入 series1_10 值(6);
插入到 series1_10 的值(7);
插入到 series1_10 的值(8);
插入 series1_10 values(9);
插入 series1_10 值(10);

- 用於將 JSON 陣列提取為一個^分隔字串的 UDF
CREATE OR REPLACE FUNCTION f_extractJson(jsonVar varchar)RETURNS varchar IMMUTABLE as $$
def myfunc(myParm)
import json
cars = json.loads(jsonVar)
parsedString =’’
for car in cars [cars]:
用於汽車中的模型[Models]:
parsedString = parsedString + car [Manufacturer] +’〜’+ model [Name] +’^’
返回 parsedString

return myfunc(jsonVar)
$$ LANGUAGE plpythonu ;

- 檢查資料

從 car_sample 中選擇 dim_id,f_extractJson(info);

- 透視行

使用 w1 AS(從 car_sample 選擇 dim_id,f_extractJson(info) 資訊)
選擇 dim_id,number,info,split_part(split_part(info,’^’,number),’〜’,1)
製造商,split_part(split_part(info,’ ^’,數字),’〜’,2)模型
來自 w1 交叉連線系列 1_10
,其中數字<= regexp_count(info,’[= ^ =]’);