hive处理json数据_(转)hive中解析json数组
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数组相关推荐
- mysql 动态sql 解析json数据_在SQL 中生成JSON数据
这段时间接手一个数据操作记录的功能,刚拿到手上的时候打算用EF做,后来经过仔细考虑最后还是觉定放弃,最后思考再三决定: 1.以模块为单位分表.列固定(其实可以所有的操作记录都放到同一个表,但是考虑到数 ...
- php json数据条数,PHP中的JSON数据
JSON简介 JSON的全称是"JavaScript Object Notation",意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.XM ...
- python返回json数据_python和flask中返回JSON数据的方法
在python中可以使用json将数据格式化为JSON格式: 1.将字典转换成JSON数据格式: s=['张三','年龄','姓名'] t={} t['data']=s return json.dum ...
- python发送json数据_在Websockets上发送JSON
我有一个简单的Python tornado Websockets服务器,从JavaScript客户端接收消息.我正在尝试发送JSON数据,我找到的唯一解决方案是将JSON对象转换成字符串JSON,发送 ...
- python中json方法_在python中使用JSON库(通用方法),json,的,常用
dumps 方法 Python 数据结构转换为 JSON: import json data = { 'name' : 'ruci', 'key' : 12, 'url' : 'http://127. ...
- controller接收json数据_这篇SpringBoot整合JSON的学习笔记,建议收藏起来,写的太细了
前言 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛. 采用完全独立于编程语言的文本格式来存储和表示数据. 简洁和清晰 ...
- wps解析json数据_一些非常实用的JSON 教程
以下内容来自W3school. JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 ...
- android json字符串转成json对象_在PHP中处理JSON数组以及对象
php中文网最新课程 每日17点准时技术干货分享 在 PHP 中处理 JSON 数组以及对象 与客户端混淆的常见原因是围绕 JSON 数组和对象,以及如何在 PHP 中指定他们.特别是,问题是由空对象 ...
- python读取json数据教程_Python教程之解析json数据
这里先说一下什么是json,其实json是一种跨语言通用的数据格式,它的本质是一个字符串,然而几乎所有的计算机语言都可以将这种json格式的数据转为自己能使用的数据类型,例如在PHP中json字符串可 ...
最新文章
- Ubuntu通过路由器上网的配置
- seaborn系列 (12) | 增强箱图boxenplot()
- linux系统 克隆 恢复 Clonezilla 再生龙 使用
- android开发之 - 圆形头像
- 解析程序员的几个成长阶段
- SQL基础操作_8_基础概念
- 计算机网络基础端口号,1 计算机网络基础练习
- c语言int的存储形式,C语言变量的存储类型有3种,即int型、float型和char型
- 如何从控制台测试AngularJS服务?
- 吴恩达神经网络和深度学习-学习笔记-18-Softmax回归
- 【Python】keras使用Lenet5识别mnist
- python大数据毕设选题
- tkinter教程_Tkinter教程–第2部分
- centos php ioncube_CentOS简单安装ioncube组件
- win7u盘修复计算机教程视频,钻研U盘修复工具使用教程
- 记一次坑爹的RSA旅程____快哭了555555555(来自实验吧的warmup的wp和感想)
- 学云计算需要准备哪些知识?
- 一文系统搞懂协同推荐算法(二)
- Skype for Business Client 2016 聊天记录存放公共邮箱
- F 魏迟燕的自走棋(思维+贪心+并查集维护联通块/左部点配对边<=2的匈牙利)
热门文章
- Struts2获取request三种方法
- 记录:自制的小说推荐程序(一)
- 17.07.26 Oracle安装
- WinCE的C#编程,对float型进行四舍五入保留两位小数,小数进行四舍五入操作,Math.Round的应用案例。...
- 【案例分析】android广播接收不到原因分析
- python 对象类型有哪些?
- c语言是函数式原型的编程,编程范式|程序世界里的编程范式,探索编程本质
- 如何用staruml画包图_StarUML的9种图
- 简单的java rpc_Java 简单的rpc 一
- webbrowser 百度列表点击_百度信息流推广后台完整的实操流程!