HiveSQL解析json数组

样例数据: 

[{"website":"www.baidu.com","name":"百度"},{"website":"www.taobao.com","name":"淘宝"},{"website":"www.jd.com","name":"京东"}]

解决思路

我们可以通过以下办法解析json数组 :

先通过正则表达式将数组中的  ,  用  ; 代替:

select regexp_replace('[{"website":"www.baidu.com","name":"百度"},{"website":"www.taobao.com","name":"淘宝"}]', '\\}\\,\\{','\\}\\;\\{');

结果:

[{"website":"www.baidu.com","name":"百度"};{"website":"www.taobao.com","name":"淘宝"}]

 再通过正则表达式把数组中的 [ ] 去掉:

select regexp_replace(
regexp_replace(
'[{"website":"www.baidu.com","name":"百度"},{"website":"www.taobao.com","name":"淘宝"}]', '\\}\\,\\{','\\}\\;\\{'
),'\\[|\\]',''
);

结果:

{"website":"www.baidu.com","name":"百度"};{"website":"www.taobao.com","name":"淘宝"}

 接下来用split函数按  ; 进行分割:

select 
split(
regexp_replace(
regexp_replace(
'[{"website":"www.baidu.com","name":"百度"},{"website":"www.taobao.com","name":"淘宝"}]', '\\}\\,\\{','\\}\\;\\{'
),'\\[|\\]',''
),'\\;'
);

结果:

["{"website":"www.baidu.com","name":"百度"}","{"website":"www.taobao.com","name":"淘宝"}"]

 再利用explode函数将数组转换按列输出:

select explode(
split(
regexp_replace(
regexp_replace(
'[{"website":"www.baidu.com","name":"百度"},{"website":"www.taobao.com","name":"淘宝"}]', '\\}\\,\\{','\\}\\;\\{'
),'\\[|\\]',''
),'\\;'
)
);

结果:

{"website":"www.baidu.com","name":"百度"}
{"website":"www.taobao.com","name":"淘宝"}

 最后用get_json_object函数将explode转换的json格式的列进行解析。


	select
		get_json_object(busi_json, '$.website') as website,
		get_json_object(busi_json, '$.name') as name
	from data_table
	LATERAL VIEW  explode(split(regexp_replace(regexp_replace(busi_info, '\\}\\,\\{','\\}\\;\\{'),'\\[|\\]',''),'\\;'))busi as busi_json
	where dt = '20200906'
	group by get_json_object(busi_json, '$.website'),get_json_object(busi_json, '$.name')

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值