select get_json_object('{"website":"www.cnss.cn","name":"juying"}', '$.website');

select json_tuple('{"website":"www.cnss.cn","name":"juying"}', 'website', 'name');

把稳:json_tuple 相对付 get_json_object 的上风便是一次可以解析多个 Json 字段。

apachephp提供json阿里P8深夜总结之若何在 Apache Hive 中解析 Json 数组 Ruby

如果我们有个 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 中文文档"}]', '},{','};{'),'[|]','')

如果以为对你有所帮助。
记得收藏和关注呦!
(逐日更新各种大数据框架)

如需转载请注明出处(创作不易请见谅)

和巨婴程序猿一起发展。
让自己变得更精良

想理解更多精彩内容,快来关注随着巨婴去逆袭

我最近一贯在思考(大数据普通讲解)的问题,你的意见是什么呢?关注我快说出来一起互换一下吧~