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
语法访问嵌套字段。

示例

  1. 基本用法——解析 JSON 对象并保留键名大小写:

SELECT PARSE_JSON('{"Name":"Alice"}');

+------------------------+ | parse_json(...) | +------------------------+ | {"Name":"Alice"} | +------------------------+

键名

Name
Name
中的大写字母
N
N
被完整保留。

  1. 通过下标访问字段:

SELECT PARSE_JSON('{"Name":"Alice","age":30}')['Name'] AS name, PARSE_JSON('{"Name":"Alice","age":30}')['age'] AS age;

+-------+-----+ | name | age | +-------+-----+ | Alice | 30 | +-------+-----+

  1. 大小写不同的键名同时存在时,
    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 | +---------+---------+

  1. 访问嵌套字段:

SELECT PARSE_JSON('{"user":{"id":101,"name":"Bob"}}')['user']['name'] AS username;

+----------+ | username | +----------+ | Bob | +----------+

  1. 解析 JSON 数组并通过索引访问:

SELECT PARSE_JSON('["x","y","z"]')[1] AS second_element;

+----------------+ | second_element | +----------------+ | y | +----------------+

  1. 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"} ← 键名保持原样

注意事项

  • json_string
    json_string
    不是合法 JSON 时,函数返回
    NULL
    NULL
    ,不抛出异常。如需在解析失败时得到明确提示,可在外层加
    IS NULL
    IS NULL
    检查。
  • 返回值类型为 VARIANT,通过
    ['key']
    ['key']
    取出的字段是字符串形式;若需要特定类型(如 INT、DOUBLE),需显式
    CAST
    CAST
    CAST(PARSE_JSON(col)['age'] AS INT)
    CAST(PARSE_JSON(col)['age'] AS INT)
  • JSON 数组索引从
    0
    0
    开始。
  • FROM_JSON
    FROM_JSON
    的选型对比:
场景推荐函数
键名大小写需要区分(如
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

相关文档

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