hive中解析一般的json是很容易的,get_json_object就可以了。

但如果字段是json数组,比如

[{"bssid":"6C:59:40:21:05:C4","ssid":"MERCURY_05C4"},{"bssid":"AC:9C:E4:04:EE:52","appid":"10003","ssid":"and-Business"}],

直接调用get_json_object返回空值。这样的话对于不会写UDF的同学来说,解析json数组就变得很棘手,好在hive中自带了explode函数,从而让解析json数组变得有可能了。这里先介绍一下explode的使用方法。

explode(array)

select explode(array('A','B','C')) as col;

select tf.* from (select 0 from dual) t lateral view explode(array('A','B','C')) tf as col;

运行结果:

col

C

B

A

函数说明:explode的参数是数组,提供了类似于列转的功能;假如参数数组长度为3,则返回的记录会是3行,且每列为各个数组项,如上。回到

[{"bssid":"6C:59:40:21:05:C4","ssid":"MERCURY_05C4"},

{"bssid":"AC:9C:E4:04:EE:52","appid":"10003","ssid":"and-Business"}],

怎么解析出bssid?思路是通过explode把原数据变成2行数据

({"bssid":"6C:59:40:21:05:C4","ssid":"MERCURY_05C4"}和

{"bssid":"AC:9C:E4:04:EE:52","appid":"10003","ssid":"and-Business"}),

然后再使用get_json_object解析。

具体代码如下:

select ss.col

from (

select

split(regexp_replace(regexp_extract(

'[{"bssid":"6C:59:40:21:05:C4","ssid":"MERCURY_05C4"},

{"bssid":"AC:9C:E4:04:EE:52","appid":"10003","ssid":"and-Business"}]',

'^\\[(.+)\\]$',1),

'\\}\\,\\{', '\\}\\|\\|\\{'),

'\\|\\|'

) as str

from dual) pp

lateral view explode(pp.str) ss as col ;

运行结果:

col

{"bssid":"AC:9C:E4:04:EE:52","appid":"10003","ssid":"and-Business"}

{"bssid":"6C:59:40:21:05:C4","ssid":"MERCURY_05C4"}

说明:因为原数据是string(并不是真正的数组类型)类型的,所以无法直接使用explode函数。

1.regexp_extract('xxx','^\\[(.+)\\]$',1) 这里是把需要解析的json数组去除左右中括号,需要注意的是这里的中括号需要两个转义字符\\[。

2.regexp_replace('xxx','\\}\\,\\{', '\\}\\|\\|\\{') 把json数组的逗号分隔符变成两根竖线||,可以自定义分隔符只要不在json数组项出现就可以。Note:odps中实操需要改成:regexp_replace('xxx','\\}\\,\\{', '}||{') 把json数组的逗号分隔符变成两根竖线||,可以自定义分隔符只要不在json数组项出现就可以。

3.使用split函数返回的数组,分隔符为上面定义好的。

4.lateral view explode处理3中返回的数组。

另外,hive中的json_tuple解析json比get_json_object更方便。

select ss.col,rr.appid,rr.ssid,rr.bssid

from (

select split(regexp_replace(regexp_extract('

[{"bssid":"6C:59:40:21:05:C4","ssid":"MERCURY_05C4"},

{"bssid":"AC:9C:E4:04:EE:52","appid":"10003","ssid":"and-Business"}]',

'^\\[(.+)\\]$',1),

'\\}\\,\\{', '\\}\\|\\|\\{'),

'\\|\\|'

) as str

from dual) pp

lateral view explode(pp.str) ss as col

lateral view json_tuple(ss.col,'appid','ssid','bssid') rr as appid,ssid,bssid;

运行结果:

col appid ssid   bssid

{"bssid":"AC:9C:E4:04:EE:52","appid":"10003","ssid":"and-Business"}10003and-BusinessAC:9C:E4:04:EE:52

{"bssid":"6C:59:40:21:05:C4","ssid":"MERCURY_05C4"}\NMERCURY_05C46C:59:40:21:05:C4

json_tuple可以一次性解析多个字段,而get_json_object一次只能解析一个字段。

hive处理json数据_(转)hive中解析json数组相关推荐

  1. mysql 动态sql 解析json数据_在SQL 中生成JSON数据

    这段时间接手一个数据操作记录的功能,刚拿到手上的时候打算用EF做,后来经过仔细考虑最后还是觉定放弃,最后思考再三决定: 1.以模块为单位分表.列固定(其实可以所有的操作记录都放到同一个表,但是考虑到数 ...

  2. php json数据条数,PHP中的JSON数据

    JSON简介 JSON的全称是"JavaScript Object Notation",意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.XM ...

  3. python返回json数据_python和flask中返回JSON数据的方法

    在python中可以使用json将数据格式化为JSON格式: 1.将字典转换成JSON数据格式: s=['张三','年龄','姓名'] t={} t['data']=s return json.dum ...

  4. python发送json数据_在Websockets上发送JSON

    我有一个简单的Python tornado Websockets服务器,从JavaScript客户端接收消息.我正在尝试发送JSON数据,我找到的唯一解决方案是将JSON对象转换成字符串JSON,发送 ...

  5. python中json方法_在python中使用JSON库(通用方法),json,的,常用

    dumps 方法 Python 数据结构转换为 JSON: import json data = { 'name' : 'ruci', 'key' : 12, 'url' : 'http://127. ...

  6. controller接收json数据_这篇SpringBoot整合JSON的学习笔记,建议收藏起来,写的太细了

    前言 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛. 采用完全独立于编程语言的文本格式来存储和表示数据. 简洁和清晰 ...

  7. wps解析json数据_一些非常实用的JSON 教程

    以下内容来自W3school. JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 ...

  8. android json字符串转成json对象_在PHP中处理JSON数组以及对象

    php中文网最新课程 每日17点准时技术干货分享 在 PHP 中处理 JSON 数组以及对象 与客户端混淆的常见原因是围绕 JSON 数组和对象,以及如何在 PHP 中指定他们.特别是,问题是由空对象 ...

  9. python读取json数据教程_Python教程之解析json数据

    这里先说一下什么是json,其实json是一种跨语言通用的数据格式,它的本质是一个字符串,然而几乎所有的计算机语言都可以将这种json格式的数据转为自己能使用的数据类型,例如在PHP中json字符串可 ...

最新文章

  1. Ubuntu通过路由器上网的配置
  2. seaborn系列 (12) | 增强箱图boxenplot()
  3. linux系统 克隆 恢复 Clonezilla 再生龙 使用
  4. android开发之 - 圆形头像
  5. 解析程序员的几个成长阶段
  6. SQL基础操作_8_基础概念
  7. 计算机网络基础端口号,1 计算机网络基础练习
  8. c语言int的存储形式,C语言变量的存储类型有3种,即int型、float型和char型
  9. 如何从控制台测试AngularJS服务?
  10. 吴恩达神经网络和深度学习-学习笔记-18-Softmax回归
  11. 【Python】keras使用Lenet5识别mnist
  12. python大数据毕设选题
  13. tkinter教程_Tkinter教程–第2部分
  14. centos php ioncube_CentOS简单安装ioncube组件
  15. win7u盘修复计算机教程视频,钻研U盘修复工具使用教程
  16. 记一次坑爹的RSA旅程____快哭了555555555(来自实验吧的warmup的wp和感想)
  17. 学云计算需要准备哪些知识?
  18. 一文系统搞懂协同推荐算法(二)
  19. Skype for Business Client 2016 聊天记录存放公共邮箱
  20. F 魏迟燕的自走棋(思维+贪心+并查集维护联通块/左部点配对边<=2的匈牙利)

热门文章

  1. Struts2获取request三种方法
  2. 记录:自制的小说推荐程序(一)
  3. 17.07.26 Oracle安装
  4. WinCE的C#编程,对float型进行四舍五入保留两位小数,小数进行四舍五入操作,Math.Round的应用案例。...
  5. 【案例分析】android广播接收不到原因分析
  6. python 对象类型有哪些?
  7. c语言是函数式原型的编程,编程范式|程序世界里的编程范式,探索编程本质
  8. 如何用staruml画包图_StarUML的9种图
  9. 简单的java rpc_Java 简单的rpc 一
  10. webbrowser 百度列表点击_百度信息流推广后台完整的实操流程!