莫听穿林打叶声|何妨吟啸且徐行

以下是本期内容:

hive中解析简单JSON字符串,以及解析比较复杂的嵌套JSON格式的字符串

本文大纲:

01.get_json_object解析json中的单个属性02.json_tuple解析json中的多个属性03.解析多层嵌套Json

正文

  • 01 解析json中的单个属性
select get_json_object(user_log,'$.source_id') from user_log_list

使用$表示json变量,然后用 . 读取对象;

使用get_json_object()的时候一次只能解析json对象里的一个字段。

  • 02 解析json中的多个属性
select json_tuple(user_log,'source_id','properties','events') from user_log_list
  • 03 解析多层嵌套Json

单条JSON日志user_log的格式如下:

{    "source_id":1000,    "properties":{        "user_id":"10245784",        "device_id":"1001245"    },    "events":[        {            "event_id":2,            "event_data":{                "mode":6,                "intro":"想要的都在这里,一键满足需求"            }        },        {            "event_id":4,            "event_data":{                "mode":6,                "intro":"7X24小时为您服务是我们的宗旨"            }        }    ]}

1、LATERAL VIEW

我们通过多次使用Lateral view 语句解析多层嵌套的json,“lateral view”表示“横向视图”,“lateral”作为动词时表示“横向传球”。

我们看下面这张json解析逻辑图可以看出,解析完一层后,把解析出来的字段添加至原有视图的右侧(此处的逻辑类似于select * from 原有视图 left outer join 新解析出来的字段,通过这种方式把一行数据拆分成多行),继续解析下一层,以此类推。

SELECT user_log,a.source_id,a.properties,a.events FROM user_log_listLATERAL VIEW json_tuple(user_log,'source_id','properties','events') a AS source_id,properties,events--视图别名为a,生成新列的别名为source_id,properties,events

注意:在使用lateral view的时候必须指定视图别名和生成新列的别名

2、LATERAL VIEW explode

events并不是map(字典)格式,而是数组,无法通过json_tuple方法进行解析,所以我们用explode方法来解析数组。

SELECT user_log,a.source_id,b.user_id,b.device_id,d.event_id,d.event_data FROM user_log_listLATERAL VIEW json_tuple(user_log,'source_id','properties','events') a AS source_id,properties,eventsLATERAL VIEW explode(split(regexp_replace(regexp_extract(b.events,'^[(.+)]$',1),'},{', '}||{'),'||')) c AS list

解释:

regexp_extract(b.events,'^[(.+)]$',1)

其中正则表达式'^[(.+)]$'代表的是在b.events中匹配出以"["开头且以"]"结尾的中间的所有字符,index指定为1表示返回正则表达式中第一个() 对应的结果。

regexp_replace(regexp_extract(b.events,'^[(.+)]$',1),'},{', '}||{')

将数组中分隔各元素的逗号,替换成双竖杠。

split(regexp_replace(regexp_extract(b.events,'^[(.+)]$',1),'},{', '}||{'),'||')

表示以双竖杠分割字符串,返回结果为一个数组。

LATERAL VIEW explode(split(regexp_replace(regexp_extract(b.events,'^[(.+)]$',1),'},{', '}||{'),'||'))

用explode解析该数组,结合LATERAL VIEW生成新的横向视图。

⑤上述表达式中的双反斜杠为hive里的转义字符。

点击了解更多。。。

android json字符串转成json对象_【hive】解析JSON格式字符串相关推荐

  1. jQuery.parseJSON(json)方法将字符串转换成js对象

    原文地址为: jQuery.parseJSON(json)方法将字符串转换成js对象 概述 接受一个JSON字符串,返回解析后的对象. 传入一个畸形的JSON字符串会抛出一个异常.比如下面的都是畸形的 ...

  2. Java对象转换成JSON对象/JSON对象转换成JSON字符串/JSON字符串转换成JS对象

    文章目录 后端部分 前端部分 后端部分 Option op = new Option("海淀","hd");//java对象转换json对象 JSONObjec ...

  3. JSON字符串转换成List对象集合

    前两天被一个很没意思的问题给难住了,看来最近没有复习巩固,有些知识都忘了怎么运用了. 简单说下: 有一个json字符串,我想通过jackson把json字符串转换成list对象集合,网上找了很多,但都 ...

  4. Java 读取 JSON 文件转成 Map 对象

    Java 读取 JSON 文件转成 Map 对象 应用场景 待读取的外部 JSON 文件 Java 代码 读取结果 Gson 应用场景 Jar 包或 War 包引用一个外部文件作为项目运行的配置文件 ...

  5. Spring的@RequestBody非常牛x,可以将提交的json直接转换成POJO对象。

    Spring的@RequestBody非常牛x,可以将提交的json直接转换成POJO对象.

  6. 把url字符串转成url对象

    把url字符串转成url对象 方法一: let str="http://www.baidu.com:80/app/html/index.html?a=1&b=2#title" ...

  7. 05 HTML字符串转换成jQuery对象、绑定数据到元素上

    1 要求 将一段 HTML脚本 封装成一个字符串,将这个字符串转换成一个jQuery对象:然后将这个jQuery对象添加到指定的元素中去 2 步骤 定义字符串 var str = '<div i ...

  8. js如何把字符串转成数组对象

    js如何把字符串转成数组对象 //数据格式如下: list: [{radio: "",formInline: "1,2,3,4", //对此字符串做处理},{r ...

  9. cjson 对象是json数组型结构体_C语言 - cJSON解析特定格式 含有数组array类型的数据...

    在ESP32中使用了cJSON库,发现很好用.最近服务器端的JSON格式越来越多样,还是有些注意点,需要做下笔记记录下来. cJSON *MAC_arry = cJSON_GetObjectItem( ...

  10. 学会Hive解析Json数组

    在Hive中会有很多数据是用Json格式来存储的,如开发人员对APP上的页面进行埋点时,会将多个字段存放在一个json数组中,因此数据平台调用数据时,要对埋点数据进行解析.接下来就聊聊Hive中是如何 ...

最新文章

  1. java可以多重继承吗_Java中的多重继承与组合vs继承
  2. python maketrans_Python maketrans()方法
  3. Linux基础之网络配置
  4. ttk python_【转】Python GUI进阶(ttk)—让界面变得更美
  5. 动态规划和贪心算法的区别
  6. Java IO: Reader And Writer
  7. 极光推送android点击跳转页面,app关闭时点击推送消息实现页面跳转
  8. 对于大家族Sring这些你究竟了解吗
  9. Java设计模式学习02——工厂模式
  10. 敏捷开发 —— TDD(测试驱动开发)
  11. Server concepts 详解
  12. 初识edb debugger
  13. Windows相关产品密钥
  14. 模拟电路实验 02 - | 阻容耦合放大电路
  15. 亿发软件:中大型仓库进出货管理系统解决方案,定制软件让仓储作业高效便捷
  16. 【转】楼天城楼教主的acm心路历程(作为励志用)
  17. 英语知识点整理day04
  18. Android 输入法框架流程整理
  19. 字符串转换成十进制整数
  20. 【CCF会议期刊推荐】CCF推荐国际学术期刊/会议(计算机科学理论)

热门文章

  1. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_2_字符输入流读取字符数据...
  2. javaweb filter
  3. 八.nginx网站服务实践应用
  4. 剑指Offer_编程题_16
  5. 深度学习如何入门?知乎
  6. 2018. 2.4 Java中集合嵌套集合的练习
  7. Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序(一)
  8. BZOJ 1067 降雨量(RMQ-ST+有毒的分类讨论)
  9. httpHandler实现.Net无后缀名Web访问
  10. javascript 3月17日