龙空技术网

阿里P8深夜总结!之如何在 Apache Hive 中解析 Json 数组

跟着巨婴去逆袭 135

前言:

此时小伙伴们对“java解析json数组对象”大约比较关怀,朋友们都需要知道一些“java解析json数组对象”的相关知识。那么小编同时在网络上搜集了一些对于“java解析json数组对象””的相关知识,希望姐妹们能喜欢,姐妹们一起来了解一下吧!

如何在 Apache Hive 中解析 Json 数组

Hive 内部提供了大量的内置函数用于处理各种类型的需求。从内置的 UDF 可以看到两个用于解析 Json的函数:get_json_object 和 json_tuple。用过这两个函数的肯定知道,其只能解析最普通的 Json 字符串,如下:

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

select json_tuple('{"website":";,"name":"juying"}', 'website', 'name');

注意:json_tuple 相对于 get_json_object 的优势就是一次可以解析多个 Json 字段。

如果我们有个 Json 数组,这两个函数都无法处理,get_json_object 处理 Json 数组的功能很有限

select get_json_object('[{"website":";,"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":";,"name":"juying"},{"website":"cloud.cnss.com","name":"carbondata 中文文档"}]', '},{','};{'),'[|]',''),';')) as json) cnss;

语句举例二:

select explode(split(regexp_replace(regexp_replace('[{"website":";,"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":";,"name":"juying"},{"website":"cloud.cnss.com","name":"carbondata 中文文档"}]', '},{','};{')

语句举例二 regexp_replace 的作用是将 Json 数组两边的中括号去掉,所以使用完这个函数之后

regexp_replace(regexp_replace('[{"website":";,"name":"juying"},{"website":"cloud.cnss.com","name":"carbondata 中文文档"}]', '},{','};{'),'[|]','')

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

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

和巨婴程序猿一起成长。让自己变得更优秀

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

我最近一直在思考(大数据通俗讲解)的问题,你的看法是什么呢?关注我快说出来一起交流一下吧~

标签: #java解析json数组对象