自学内容网 自学内容网

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

原文地址:https://blog.csdn.net/ALX3li/article/details/140567542

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!