最后于 更新
PARSE_TO_VARIANT
功能
PARSE_TO_VARIANT 将一个完整 JSON 值解析为 VARIANT,支持 JSON 对象、数组、字符串、数字、布尔值和 JSON 字面量 null。该函数自 Doris 4.2 起支持。
语法
PARSE_TO_VARIANT(<json_value>)
参数
| 参数 | 说明 |
|---|---|
<json_value> | 包含一个完整 JSON 值的 CHAR、VARCHAR 或 STRING 表达式,也可以是 JSON/JSONB 表达式。JSON/JSONB 输入会先转换为 JSON 文本,再解析为 VARIANT。 |
返回值
返回 VARIANT 值。
- 输入为 SQL
NULL时返回 SQLNULL。 - 输入为 JSON 字面量
null时返回 Variant/JSONnull,它与 SQLNULL不同。 - JSON 非法、对象 key 重复且当前校验设置不允许、嵌套深度超限或发生其他校验错误时,查询失败。
示例
解析 JSON 文本:
SELECT CAST(
PARSE_TO_VARIANT('{"id": 42, "tags": ["doris", "sql"]}')
AS STRING
) AS value;
+----------------------------------------+
| value |
+----------------------------------------+
| {"id":42,"tags":["doris","sql"]} |
+----------------------------------------+
解析 JSON/JSONB 表达式:
SELECT CAST(
PARSE_TO_VARIANT(CAST('{"id": 42}' AS JSON))
AS STRING
) AS value;
+-----------+
| value |
+-----------+
| {"id":42} |
+-----------+
提取值并 CAST 为具体 SQL 类型:
SELECT CAST(
PARSE_TO_VARIANT('{"user": {"id": 42}}')['user']['id']
AS BIGINT
) AS user_id;
+---------+
| user_id |
+---------+
| 42 |
+---------+
SQL NULL 仍返回 SQL NULL:
SELECT PARSE_TO_VARIANT(NULL) IS NULL AS is_sql_null;
+-------------+
| is_sql_null |
+-------------+
| 1 |
+-------------+
非法 JSON 会报错:
SELECT PARSE_TO_VARIANT('{"id":');
ERROR: Parse json document failed
使用说明
- 如果希望把非法输入转换为 SQL
NULL,请使用 TRY_PARSE_TO_VARIANT。 PARSE_TO_VARIANT会显式解析 JSON。相比之下,CAST(string AS VARIANT)会把输入保留为 VARIANT 字符串,不解析 JSON,详见 VARIANT CAST 规则。