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