在 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,’[= ^ =]’);