测试 数据为:

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,且为嵌套的多层JSONJSON数据格式化之后如下:由于是生产环境上的数据,因此对于某些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