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
。
示例
- 一次提取两个顶层字段:
SELECT GET_MULTIPLE_JSON_OBJECTS('{"a":1,"b":2}', '$.a', '$.b');
+------------------------------+
| col1 | col2 |
+------+-----------------------+
| 1 | 2 |
+------------------------------+
实际返回为 struct:
{"col1":"1","col2":"2"}
{"col1":"1","col2":"2"}
,字段值均为字符串类型。
- 提取嵌套字段:
SELECT GET_MULTIPLE_JSON_OBJECTS(
'{"name":"张三","address":{"city":"北京","zip":"100000"}}',
'$.name',
'$.address.city',
'$.address.zip'
);
返回 struct:
{"col1":"张三","col2":"北京","col3":"100000"}
{"col1":"张三","col2":"北京","col3":"100000"}
- 路径不存在时返回 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
。
- 结合表列使用:
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;
💡 提示:如果需要频繁访问多个字段,建议先用
GET_MULTIPLE_JSON_OBJECTS
GET_MULTIPLE_JSON_OBJECTS
将结果存为一个列别名,再通过
.colN
.colN
访问,避免对同一 JSON 字符串重复调用。
注意事项
- 返回值中每个字段的值类型均为 STRING,使用前需根据业务需要用
CAST
CAST
转换为目标类型。
- 字段名固定为
col1
col1
、col2
col2
、…,不会使用 JSONPath 表达式本身作为字段名。
- 路径语法与
GET_JSON_OBJECT
GET_JSON_OBJECT
相同,可参考 JSONPath 规范。
相关文档