测试 数据为:
line=
{
“store”:
{
“fruit”:[{“weight”:9,“type”:“apple”}, {“weight”:10,“type”:“pear”}],
“bicycle”:{“price”:20,“color”:“red”}
},
“email”:“leaves@json_udf_test.net”,
“owner”:“leaves”
}
get单层值
hive> select get_json_object(line, '$.owner') from test;
结果:leaves
get多层值.
hive> select get_json_object(line, '$.store.bicycle.price') from test;
结果:20
get数组值[]
hive> select get_json_object(line, '$.store.fruit[0]') from test;
结果:{“weight”:9,“type”:“apple”}
hive (test)> select get_json_object(line,'$.store.fruit[0].weight') from json_test;
内容目录Hive解析json字符串一、json格式二、Hive解析json
Hive解析json字符串
json类似于python的字典,类似于key-value格式,但是可以实现嵌套的数据结构
一、json格式
json简单格式:
"name":"Tom",
"age":20,
"sex":"male"
上面是简单的json格式,还可以有复杂的嵌套格式
"name":"Tom",
"age":20,
"sex":"male",
"friend":["Jerry",
SELECT id
,get_json_object(get_json_object(operate_content,'$.finishTime'),'$.n')
,get_json_object(operate_content,'$.finishTime.n')
FROM dw.dw_plat_sinan_ticket_operate_record_da
WHERE pt='20200730000000'
and id='1112167'
HIVE解析JSON数组
数据示例:
[{“payAmount”:“375000”,“payChannelCode”:“BOC”},{“payAmount”:“376000”,“payChannelCode”:“AOC”}]
1.get_json_object函数提取json数组里面特定字段值
get_json_object可以提取json数组指标位置的值(跟数组一样)
select
get_json_object('[{"payAmount":"375000","payChannelCode":"BOC
{"KdProjCode":"A20160518015NB","DTjType":"调价","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance","PriceHzInfo":{"Item":{"HzAmountAfter":1.0190920349E10,"HzAmountBefore":1.019080
第一个参数填写json对象变量,第二个参数使用$表示json变量标识,然后用 . 或 [] 读取对象或数组;如果输入的json字符串无效,那么返回NULL。
每次只能返回一个数据项。
data 为 test表中的字段,数据结构如下:
data =
"store":
JSONObject jsonObject = new JSONObject(responseText);
JSONObject jsonObject1 = jsonObject.getJS...
一、背景最近有个需求,需要解析数仓中某张表的某个字段,该字段为JSON,且为嵌套的多层JSON,JSON数据格式化之后如下:由于是生产环境上的数据,因此对于某些value以xxx进行替代,并不影响sql的编写样例:需求是需要提取出每个这种JSON中所有的brandName。二、解决方案2.1 思路1:使用hive自带的get_json_object函数进行处理尝试之后,发现最终的效果只能是取出其中...
目录1.数据2.取出第一个json对象3.取出第一个json的age字段的值4.复杂案例
[{"name":"大郎","sex":"男","age":"25"},{"name":"西门庆","sex":"男","age":"47"}]
2.取出第一个json对象
hive (gmall)>
select get_json_object('[{"name":"大郎","sex":"男","age":"25"},{"name":"西门庆","sex":"男","age":"47"}]','$[
首先在百度搜索,json格式解析,将这段话变个格式看起来舒服。
然后,通过通过嵌套使用json函数解决。大概就是将内层的json字段当作一个整体,然后先将这个外层作为解析。在通过子查询使用方法,在外套一层json查询,将当作整体的界面在json解析就出来了;
简单举例:
数据内容:
{"name":"abc","age":"18","home":{"sheng":"neomenggu"}}
1.可以解析多个字段:
json_tuple(字段,“m1”,“m2”) as (别名1,别名2)
1,对于jsonArray(json数组),如person表的xjson字段有数据:
[{"name":"王二狗","sex":"男","age":"25"},{"name":"李狗嗨","sex":"男","age":"47"}]
取出第一个json对象,那么hive sql为:
SELECT get_json_object(xjson,"$.[0]") FROM person;
{"name":"王二狗","sex":"男","age":"25"}
取出第一个json的age字段的值:
一个表有一个abtest字段,是带有嵌套结构的json字符串,里面的key:value可能会重,需要将abtest里的所有的key:value打平去重,去掉双引号后再用逗号拼接返回,并且需要
输入的abtest如下
{"trip_ab_deal_packagerankst":"B",
"trip_ab_poivideo":"C",
"trip_ab_group_feng...
package com.iteam.test;import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class Test {public static void main(String[] args) { String s = "{\"error\":0,\"status\":\"success\",\"resu