GET_MULTIPLE_JSON_OBJECTS

简介

GET_MULTIPLE_JSON_OBJECTS
GET_MULTIPLE_JSON_OBJECTS
函数用于一次从 JSON 字符串中提取多个路径的值,返回一个 struct 类型结果。与
GET_JSON_OBJECT
GET_JSON_OBJECT
相比,多路径提取只需调用一次函数,避免对同一 JSON 字符串重复解析,性能更好。

函数一次提取路径数适用场景
GET_JSON_OBJECT
GET_JSON_OBJECT
1 个只需提取单个字段
GET_MULTIPLE_JSON_OBJECTS
GET_MULTIPLE_JSON_OBJECTS
多个需要同时提取多个字段,减少重复解析

语法

GET_MULTIPLE_JSON_OBJECTS(<json_str>, <path1>, <path2>, ...)

参数说明

  • json_str
    json_str
    (STRING):包含 JSON 格式数据的字符串。
  • path1, path2, ...
    path1, path2, ...
    (STRING):一个或多个 JSONPath 表达式,指定要提取的字段路径。路径语法与
    GET_JSON_OBJECT
    GET_JSON_OBJECT
    相同,以
    $
    $
    表示根节点,
    .key
    .key
    ['key']
    ['key']
    访问对象字段,
    [index]
    [index]
    访问数组元素。

返回值

返回 struct 类型,字段名依次为

col1
col1
col2
col2
、…,与传入路径的顺序一一对应,每个字段的值类型为 STRING。若某路径在 JSON 中不存在,对应字段返回
NULL
NULL

示例

  1. 一次提取两个顶层字段:

SELECT GET_MULTIPLE_JSON_OBJECTS('{"a":1,"b":2}', '$.a', '$.b');

+------------------------------+ | col1 | col2 | +------+-----------------------+ | 1 | 2 | +------------------------------+

实际返回为 struct:

{"col1":"1","col2":"2"}
{"col1":"1","col2":"2"}
,字段值均为字符串类型。

  1. 提取嵌套字段:

SELECT GET_MULTIPLE_JSON_OBJECTS( '{"name":"张三","address":{"city":"北京","zip":"100000"}}', '$.name', '$.address.city', '$.address.zip' );

返回 struct:

{"col1":"张三","col2":"北京","col3":"100000"}
{"col1":"张三","col2":"北京","col3":"100000"}

  1. 路径不存在时返回 NULL:

SELECT GET_MULTIPLE_JSON_OBJECTS('{"a":1}', '$.a', '$.b');

返回 struct:

{"col1":"1","col2":null}
{"col1":"1","col2":null}
$.b
$.b
路径不存在,
col2
col2
NULL
NULL

  1. 结合表列使用:

SELECT GET_MULTIPLE_JSON_OBJECTS(event_payload, '$.user_id', '$.action', '$.ts') AS parsed FROM event_log LIMIT 5;

可进一步用

.col1
.col1
.col2
.col2
.col3
.col3
访问各字段:

SELECT GET_MULTIPLE_JSON_OBJECTS(event_payload, '$.user_id', '$.action', '$.ts').col1 AS user_id, GET_MULTIPLE_JSON_OBJECTS(event_payload, '$.user_id', '$.action', '$.ts').col2 AS action, GET_MULTIPLE_JSON_OBJECTS(event_payload, '$.user_id', '$.action', '$.ts').col3 AS ts FROM event_log;

注意事项

  • 返回值中每个字段的值类型均为 STRING,使用前需根据业务需要用
    CAST
    CAST
    转换为目标类型。
  • 字段名固定为
    col1
    col1
    col2
    col2
    、…,不会使用 JSONPath 表达式本身作为字段名。
  • 路径语法与
    GET_JSON_OBJECT
    GET_JSON_OBJECT
    相同,可参考 JSONPath 规范

相关文档

联系我们
预约咨询
微信咨询
电话咨询
邮件咨询