odps SQL解析json对象的一些问题

1.如何获取多个json数组中嵌套的对象集合?

例如一个json就是一个界面,有多个shop;一个shop有多个product;每个product都有一个title。我们该如何获取所有shop的所有product的title呢?

odps中get_json_object()可以解决这个问题:

get_json_object(json,'$.shop[*].product[*].title')

但上述代码返回的是一个数组型的字符串[xxx,xxx,xxx]。这就需要探讨第二个问题了

2.如何将json数组变成数组呢?

odps同样也提供了一个函数 from_json()

from_json(
    get_json_object(json,'$.shop[*].product[*].title'),
'array<string>') -- 变换json格式变成数组形式

通过上述代码可以将返回的数组型字符串变成字符串类型数组后面可以再用lateral view展开。

但是这会有个问题,如果该json数组里只有一个对象,则会无法解析!按理来说数组可以仅仅只拥有一个元素,这是因为它在识别json数组时,如果只有一个数组元素,则会去掉json数组外层的中括号 '[]',导致from_json函数解析失效。

那我们正常来说就是存在着json数组里有不确定个的元素,怎么解决这个解析失效的问题呢?可以试试以下的代码:

from_json(
        concat('[',
            trim(
                get_json_object(note,'$.images_list[*]')
            ,'[]')  -- 统一形式,去掉字符串两边括号,有些json数组中就一个对象,解析出来的字符串缺少'[]',导致from_json函数无法解析
        ,']')   -- 再统一格式将括号'[]'加回来
    ,'array<string>') -- 变换json格式变成数组形式) 
    as images_list

先解析出来json对象,再统一去除中括号,然后再将中括号添回来,最后通过from_json函数进行转换,这样我们就可以统筹所有的情况了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值