HIVE:使用get_json_object解析json对象

1 json对象

  1. JSON 对象使用在大括号 {…} 中书写。
  2. 对象可以包含多个 key/value(键/值)对。key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)
  3. key 和 value 中使用冒号 : 分割。
  4. 每个 key/value 对使用逗号 , 分割。
  5. 如果value为json类型,则表示嵌套对象。

2 get_json_object 语法

string get_json_object(json <json>, string <json_path>)
参数说明
json:必填,待处理的JSON数据,标准的JSON格式对象,格式为{Key:Value, Key:Value,...}
json_path:必填,需要返回的值的JSON路径。

返回值说明
返回STRING类型。

json_path 不同字符的含义如下:

  • $:表示根节点。

  • .或[‘’]:表示子节点。MaxCompute支持用这两种字符解析JSON对象,当JSON的Key本身包含.时,可以用[‘’]来替代。

  • []:[number]表示数组下标,从0开始。

3 获取指定字符串过程中的一些小坑

获取key1的对象为嵌套对象,可以使用.或[]获取,但是如果key包含.,则需要使用[]获取,否则解析的路径错误。
比如如下json字符串,在sql中使用str指代:

{
    "second": {
        "key1": "-999",
        "key2.1": "1"
    },
    "test.isfirst": "0"
}

不同解析语法获取的解析结果如下:

SELECT get_json_object(str,'$.second["key2.1"]'), -- 返回结果 “1”
       get_json_object(str,'$.second.key1'),  -- 返回结果 “-999”
       get_json_object(str,'$["test.isfirst"]'), -- 返回结果 “0”
       get_json_object(str,'$.test.isfirst') -- 返回结果 NULL

参考文档

  1. json对象
  2. https://help.aliyun.com/zh/maxcompute/user-guide/get-json-object
  3. https://stackoverflow.com/questions/63341060/how-do-you-escape-dot-in-dot-syntax-e-g-in-get-json-object
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: hive get_json_objectHive中的一个函数,用于从JSON字符串中提取指定的值。该函数需要两个参数:第一个参数是JSON字符串,第二个参数是要提取的值的路径。例如,如果我们有一个JSON字符串{"name":"John","age":30,"city":"New York"},我们可以使用get_json_object函数来提取name的值,语法如下: SELECT get_json_object('{"name":"John","age":30,"city":"New York"}', '$.name'); 输出结果为: John 这个函数在Hive中非常有用,因为Hive支持将JSON数据存储在表中,并且可以使用get_json_object函数来查询和分析这些数据。 ### 回答2: Hive的get_json_object函数是用来从JSON格式的字符串中提取指定的字段值的函数。它的语法如下: get_json_object(json_string, json_path) 其中,json_string是指要进行解析JSON格式的字符串,json_path是指要提取的字段的路径。返回值是指定字段的值。 get_json_object函数的用途是在Hive中对JSON格式的数据进行处理和分析。通过提供json_string和json_path参数,我们可以很方便地从JSON字符串中提取我们所需的字段的值。 举个例子说明,假设我们有一个JSON格式的字符串: {"name": "张三", "age": 20, "city": "北京"} 我们可以使用get_json_object函数来提取name字段的值,语法如下: SELECT get_json_object('{"name": "张三", "age": 20, "city": "北京"}', '$.name'); 以上语句将返回字符串"张三"作为结果。 除了提取顶层字段的值外,get_json_object函数还支持提取嵌套字段的值。比如,假设我们有如下的JSON字符串: { "person": { "name": "张三", "age": 20, "city": "北京" } } 我们可以使用如下语句来提取嵌套字段name的值: SELECT get_json_object('{ "person": { "name": "张三", "age": 20, "city": "北京" } }', '$.person.name'); 以上语句将返回字符串"张三"作为结果。 总之,Hive的get_json_object函数是用来从JSON格式的字符串中提取指定字段值的一个便捷函数,可以方便地进行JSON数据的处理和分析。 ### 回答3: Hive中的get_json_object函数用于从JSON字符串中提取特定字段的值。它的语法如下: get_json_object(JSON_STRING, JSON_PATH) 其中,JSON_STRING是一个包含JSON数据的字符串,JSON_PATH是指向要提取值的字段的路径。 该函数返回指定字段的值,如果路径无效或字段不存在,则返回null。 例如,假设我们有以下JSON字符串: {"id": 1, "name": "John", "age": 25, "address": {"street": "Main Street", "city": "New York"}} 我们可以使用get_json_object函数来提取特定字段的值。例如: SELECT get_json_object('{"id": 1, "name": "John", "age": 25}', '$.name'); 这将返回字符串值"John"。 如果我们要提取嵌套字段的值,可以使用JSON_PATH来指定路径。例如: SELECT get_json_object('{"id": 1, "name": "John", "address": {"street": "Main Street", "city": "New York"}}', '$.address.city'); 这将返回字符串值"New York"。 需要注意的是,JSON_PATH必须遵循JSONPath规范,以正确指定要提取的字段路径。 总而言之,get_json_object函数在Hive中用于从JSON字符串中提取特定字段的值,可以通过指定JSON_PATH来提取嵌套字段的值,并返回相应的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值