HiveSQL:提取json串内容(含key为中文环境)——get_json_oject和json_tup ...

金歌  金牌会员 | 2024-12-29 06:33:09 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 860|帖子 860|积分 2580

提取json串中内容,json格式示例如下


  
get_json_object

  1. select  json_data
  2.   ,get_json_object(json_data,'$.price')  as price -- 取第一层
  3.   ,get_json_object(json_data,'$.inquiry_params')  as inquiry_params -- 取第一层,取本身也是个json串
  4.   ,get_json_object(json_data,'$.params.cateId') as cateId -- 取多层嵌套的
  5.   ,get_json_object(json_data,'$.inquiry_params.颜色') as color2 -- 中文名的 ,此方法失败
  6. from ods.ods_table1 a
  7. where get_day='2024-08-10'
复制代码

可以看到,当json中对应的key是中文时,使用get_json_object获取失败,改为使用json_tuple。
json_tuple

首先,先看下如果获取前3个内容,json_tuple和get_json_object的不同。
  1. select  json_data
  2.   ,get_json_object(json_data,'$.price')  as price
  3.   ,get_json_object(json_data,'$.inquiry_params')  as inquiry_params
  4.   ,get_json_object(json_data,'$.params.cateId') as cateId
  5.   ,t1.text1
  6.   ,t1.text2
  7.   ,t1.text3
  8. from ods.ods_table1 a
  9. lateral view json_tuple(json_data,'price','inquiry_params','cateId') t1 as text1,text2,text3
  10. where get_day='2024-08-10'
复制代码

从上述例子,发现json_tuple和get_json_object的一些不同

  • 可以看到json_tuple一次可以取多个内容;
  • json_tuple只能取到 第一层 ,取不到嵌套的里层的内容,表现为cateId为NULL(text3列)。
那么回过头来,看看我们要取“颜色”的问题:
由于要取的颜色是在嵌套在json_data的inquiry_parms里的,不是第一层,json_tuple不能直接取到,那么做个改动:把传入函数的json_data改为inquiry_parms,那么“颜色”就酿成第一层了,如许使用json_tuple就可以取到了。
json_tuple只能取到 第一层。
  1. select  brand,product_name,title,json_data
  2.   ,get_json_object(json_data,'$.price')  as price
  3.   ,get_json_object(json_data,'$.inquiry_params')  as inquiry_params
  4.   ,get_json_object(json_data,'$.params.cateId') as cateId
  5.   ,get_json_object(json_data,'$.inquiry_params.颜色') as color2
  6.   -- 取中文key的内容
  7.   ,t1.color5
  8.   ,t1.function5
  9.   ,t1.rag5
  10. from ods.ods_table1 a
  11. lateral view json_tuple(get_json_object(json_data,'$.inquiry_params'),'颜色','功能性问题(可多选或不选)','容量') t1 as color5,function5,rag5
  12. -- 把get_json_object(json_data,'$.inquiry_params')作为整体传入json_tuple函数
  13. where get_day='2024-08-10'
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表