PARSE_JSON
简介
PARSE_JSON
PARSE_JSON
函数将 JSON 格式的字符串解析为半结构化的 VARIANT 对象,返回值可通过下标运算符(
['key']
['key']
或
[index]
[index]
)访问任意层级的字段。与
FROM_JSON
FROM_JSON
不同,
PARSE_JSON
PARSE_JSON
不需要预先声明 schema,且
完整保留 JSON 键名的原始大小写,适合处理键名大小写敏感或结构不固定的 JSON 数据。
语法
PARSE_JSON(json_string)
参数
json_string
json_string
:类型为 STRING
STRING
,要解析的 JSON 字符串。输入不是合法 JSON 时返回 NULL
NULL
。
返回类型
返回 VARIANT 类型(半结构化对象),可通过
['key']
['key']
、
[index]
[index]
或
.key
.key
语法访问嵌套字段。
示例
- 基本用法——解析 JSON 对象并保留键名大小写:
SELECT PARSE_JSON('{"Name":"Alice"}');
+------------------------+
| parse_json(...) |
+------------------------+
| {"Name":"Alice"} |
+------------------------+
键名
Name
Name
中的大写字母
N
N
被完整保留。
- 通过下标访问字段:
SELECT PARSE_JSON('{"Name":"Alice","age":30}')['Name'] AS name,
PARSE_JSON('{"Name":"Alice","age":30}')['age'] AS age;
+-------+-----+
| name | age |
+-------+-----+
| Alice | 30 |
+-------+-----+
- 大小写不同的键名同时存在时,
PARSE_JSON
PARSE_JSON
可以区分:
SELECT PARSE_JSON('{"A":1,"a":2}')['A'] AS upper_a,
PARSE_JSON('{"A":1,"a":2}')['a'] AS lower_a;
+---------+---------+
| upper_a | lower_a |
+---------+---------+
| 1 | 2 |
+---------+---------+
- 访问嵌套字段:
SELECT PARSE_JSON('{"user":{"id":101,"name":"Bob"}}')['user']['name'] AS username;
+----------+
| username |
+----------+
| Bob |
+----------+
- 解析 JSON 数组并通过索引访问:
SELECT PARSE_JSON('["x","y","z"]')[1] AS second_element;
+----------------+
| second_element |
+----------------+
| y |
+----------------+
- 与
FROM_JSON
FROM_JSON
的大小写对比——演示两个函数的差异:
-- FROM_JSON 将字段名折叠为小写
SELECT from_json('{"Name":"Alice"}', 'struct<Name:string>') AS from_json_result;
-- 结果:{"name":"Alice"} ← 键名被转为小写
-- PARSE_JSON 保留原始大小写
SELECT PARSE_JSON('{"Name":"Alice"}') AS parse_json_result;
-- 结果:{"Name":"Alice"} ← 键名保持原样
注意事项
| 场景 | 推荐函数 |
|---|
键名大小写需要区分(如 A
A 和 a
a 是不同字段) | PARSE_JSON
PARSE_JSON |
| JSON 结构不固定,不想提前声明 schema | PARSE_JSON
PARSE_JSON |
| 需要将 JSON 字段映射为强类型 struct/array/map | FROM_JSON
FROM_JSON |
| 下游操作依赖明确的列类型(如 JOIN、GROUP BY) | FROM_JSON
FROM_JSON |
相关文档