hive解析key值包含数组的json

一般的json直接 get_json_object(column,'$.key') 可以直接取出对应字段

column:存储json的列

key:json中的key

代码事例:

    select
        company_id
        ,tag_manage
        ,get_json_object(tag_manage,'$.SERVICE_PROMISE')
    from XXX
    where 
          XXX

结果:

数据被解析出来了,但是key(SERVICE_PROMISE)里面存的是数组,而且get_object_json得到的结果是一个字符串。如何进一步解析?

方案一:可以将得到的字符串转化为数组,利用函数split(String,Separator),是将String根据Separator来分割成数据,在进行结下来的操作。(顺便记录下求数组长度的函数size(array))

方案二:直接获取数组中指定位置的值,get_json_object(column,'$.key[index]'),可直接得到数组中指定位置的某个值

方案二代码示例

select
    company_id
    ,tag_manage
    ,get_json_object(tag_manage,'$.SERVICE_PROMISE')
    ,get_json_object(tag_manage,'$.SERVICE_PROMISE[0]')
from XXX
where 
    XXX

结果:

上面只能获得数组中某个位置的值,如果想要的值并不确定在第几位,咋整?

可以json解析后拿到数组,这时候数结果其实是字符串,使用函数instr(String,target)判断字符串String是否包含子串target,如果包含则返回子串的位置,如果不存在返回0.

示例代码:

select
    company_id
    ,tag_manage
    ,get_json_object(tag_manage,'$.SERVICE_PROMISE')
    ,get_json_object(tag_manage,'$.SERVICE_PROMISE[0]')
    ,instr(get_json_object(tag_manage,'$.SERVICE_PROMISE'),'111')
from XXX
where 
    XXX

结果:

嗯,到这里需求结束啦。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值