select get_json_object(39;{34;website":"www.cnss.cn","name":"juying"}', '$.website');
select json_tuple('{"website":"www.cnss.cn","name":"juying"}', 'website', 'name');
把稳:json_tuple 相对付 get_json_object 的上风便是一次可以解析多个 Json 字段。
如果我们有个 Json 数组,这两个函数都无法处理,get_json_object 处理 Json 数组的功能很有限
select get_json_object('[{"website":"www.cnss.cn","name":"juying"},
{"website":"cloud.cnss.com","name":"juying 中文文档"}]', '$.[1].website');
把稳:如果我们想将全体 Json 数组里面的 website 字段都解析出来,如果这么写将非常麻烦,由于我们无法确定数组的长度,而且纵然确定了,这么写可掩护性也很差,以是我们须要想别的办法。
利用explode函数解析json数组explode() 吸收一个 array 或 map 类型的数据作为输入,然后将 array 或 map 里面的元素按照每行的形式输出。其可以合营 LATERAL VIEW 一起利用。
语句举例一:
select json_tuple(json, 'website', 'name')
from
(SELECT explode(split(regexp_replace(regexp_replace('[{"website":"www.cnss.cn","name":"juying"},{"website":"cloud.cnss.com","name":"carbondata 中文文档"}]', '},{','};{'),'[|]',''),';')) as json) cnss;
语句举例二:
select explode(split(regexp_replace(regexp_replace('[{"website":"www.cnss.cn","name":"juying"},
{"website":"cloud.cnss.com","name":"carbondata 中文文档"}]', '},{','};{'),'[|]',''),';')) as json
阐明:
regexp_replace('json数组', '},{','};{') ====》把json数组中的分隔符更换成为;分号
regexp_replace('qweqw','[|]','') ====》 |表示or 把json中的[或者]更换成为空
sql语法阐明:explode 函数只能吸收数组或 map 类型的数据,而 split 函数天生的结果便是数组;
语句举例一 regexp_replace 的浸染是将 Json 数组元素之间的逗号换身分号,,
regexp_replace('[{"website":"www.cnss.cn","name":"juying"},{"website":"cloud.cnss.com","name":"carbondata 中文文档"}]', '},{','};{')
语句举例二 regexp_replace 的浸染是将 Json 数组两边的中括号去掉,以是利用完这个函数之后
regexp_replace(regexp_replace('[{"website":"www.cnss.cn","name":"juying"},{"website":"cloud.cnss.com","name":"carbondata 中文文档"}]', '},{','};{'),'[|]','')
如果以为对你有所帮助。记得收藏和关注呦!
(逐日更新各种大数据框架)
如需转载请注明出处(创作不易请见谅)
和巨婴程序猿一起发展。让自己变得更精良
想理解更多精彩内容,快来关注随着巨婴去逆袭
我最近一贯在思考(大数据普通讲解)的问题,你的意见是什么呢?关注我快说出来一起互换一下吧~