HIVE获取json字段特定值(单个json或者json数组)

1.获取单个json字符串里的某一特定值

函数:get_json_object(单个json,'$.要获取的字段')

示例:

代码:SELECT get_json_object('{"NAME":"张三","ID":"1"}','$.NAME') as name;

SELECT get_json_object('{"NAME":"张三","ID":"1"}','$.NAME');

运行结果:

HIVE获取json字段特定值(单个json或者json数组)_第1张图片

2.获取json数组特定值

2.1假如只是想获取json数组中某特定字段的全部值,不需要分行

函数:get_json_object(单个json,'$[ 数组中的特定位置或者不写,不写就是整个数组中的某字段所有值].要获取的字段')

示例:

代码:SELECT get_json_object('[{"NAME":"张三","ID":"1"},{"NAME":"李四","ID":"2"}]','$[0].NAME');

SELECT get_json_object('[{"NAME":"张三","ID":"1"},{"NAME":"李四","ID":"2"}]','$[0].NAME');

运行结果:

HIVE获取json字段特定值(单个json或者json数组)_第2张图片

示例:

代码:SELECT get_json_object('[{"NAME":"张三","ID":"1"},{"NAME":"李四","ID":"2"}]','$[].NAME');

SELECT get_json_object('[{"NAME":"张三","ID":"1"},{"NAME":"李四","ID":"2"}]','$[].NAME');

运行结果:

HIVE获取json字段特定值(单个json或者json数组)_第3张图片

2.2假如只是想获取json数组中某特定字段的全部值,要分行

假如只想要将json数组分行,用explode()就行,但是只能展示json数组分出来的行,假如要解析出数组中每json的某一字段值,那么就要利用regexp_extract,regexp_replace,split将json数组进行处理,然后再结合lateral viewget_json_object进行分行取值

代码示例:

SELECT 
tab1.除了JSON数组外想要展示的字段
,GET_JSON_OBJECT(临时表名.列重命名,'$.想要获取的字段') as 字段重命名
FROM (
        SELECT 除了JSON数组外想要展示的字段 ,
        split
            (regexp_replace
                  (regexp_extract(JSON数组,'^\\[(.+)\\]$',1),--regexp_extract正则表达式解析函数
                            '\\}\\,\\{', '\\}\\|\\|\\{'),--regexp_replace替换
                            '\\|\\|') --split分割符
                            as str --处理json数组
        FROM 表名)
tab1
lateral view explode(tab1.str) 临时表名--随意取 as 列重命名--随意取;

案例:

数据示例:

表名:classdata

class data
1 [{"NAME":"张三","ID":"1"},{"NAME":"李四","ID":"2"},{"NAME":"王五","ID":"3"}]
2 [{"NAME":"刘二","ID":"1"},{"NAME":"邓虎","ID":"2"}]

代码:

SELECT 
tab1.class
,GET_JSON_OBJECT(tmptab .json_str ,'$.NAME') as NAME--想要ID,这样写再加一列就好
FROM (
        SELECT class ,
        split(regexp_replace(regexp_extract(data,'^\\[(.+)\\]$',1),'\\}\\,\\{', '\\}\\|\\|\\{'),'\\|\\|') as eq_json_str 
        FROM classdata)tab1
lateral view explode(tab1.eq_json_str ) tmptab as json_str ;

运行结果:

class NAME
1 张三
1 李四
1 王五
2 刘二
2 邓虎

你可能感兴趣的:(hive,json,hive)