废话不多说,直接上案例
如下是某json字段的查询结果,可以看出它是一个json数组
select sales_price from order_goods where order_number = 'R1001';
-- 结果:
[{"threshold_number":1,"group_id":1,"gear_price":"120.00"},{"threshold_number":5,"group_id":2,"gear_price":"110.00"},{"threshold_number":10,"group_id":3,"gear_price":"100.00"}]
处理思路有两种,用get_json_object抽取或者explode炸开
至于清洗一般用regexp_replace(sales_price,'a','b'),支持正则表达式。去除空值用where is not null
1、get_json_object方法
select get_json_object(sales_price, '$[1].gear_price')
from order_good where order_number = 'R1001'
-- 结果:
110
第二个参数索引了数组第二个数据中gear_price键名的值
2、explode方法
select
explode(split(regexp_replace(regexp_replace(sales_price, '\\[|\\]',''),'\\}\\,\\{','\\}\\;\\{'),'\\;')) sales_price
from order_goods
这样数组能够炸开,后续按需处理