跳到主要内容

from_json:JSON 字符串解析

速查结论

from_json(jsonStr, schema[, options]) 是 Spark SQL 中用于将 JSON 字符串解析为结构体的函数。支持嵌套结构体和数组的解析。schema 可以是 DDL 字符串或 STRUCT 类型。

语法

from_json(jsonStr, schema[, options])

参数说明

参数说明
jsonStr待解析的 JSON 字符串
schema目标 schema,DDL 字符串或 STRUCT 类型
options可选,解析选项的 Map

返回值:按 schema 解析出的结构体。

Since: 2.2.0

示例

基础解析

-- 扁平 JSON
SELECT from_json('{"a":1, "b":0.8}', 'a INT, b DOUBLE');
-- 结果: {"a":1,"b":0.8}

带 options 解析

-- 指定时间戳格式
SELECT from_json('{"time":"26/08/2015"}', 'time Timestamp', map('timestampFormat', 'dd/MM/yyyy'));
-- 结果: {"time":2015-08-26 00:00:00}

嵌套结构体与数组

-- 嵌套数组的结构体
SELECT from_json(
'{"teacher": "Alice", "student": [{"name": "Bob", "rank": 1}, {"name": "Charlie", "rank": 2}]}',
'STRUCT<teacher: STRING, student: ARRAY<STRUCT<name: STRING, rank: INT>>>'
);
-- 结果: {"teacher":"Alice","student":[{"name":"Bob","rank":1},{"name":"Charlie","rank":2}]}

取出解析结果中的字段

-- 用 . 访问结构体字段
SELECT
from_json(json_col, 'name STRING, age INT').name AS name,
from_json(json_col, 'name STRING, age INT').age AS age
FROM t;

常见报错与避坑指南

JSON 格式不合法

JSON 字符串必须是合法的 JSON 格式(双引号包裹 key),单引号或不加引号的 key 会导致解析失败。

-- 错误写法:单引号 key 不是合法 JSON
SELECT from_json("{'a':1}", 'a INT');
-- 返回 NULL

-- 正确写法:双引号 key
SELECT from_json('{"a":1}', 'a INT');
-- 结果: {"a":1}

Schema 与 JSON 结构不匹配

schema 定义的字段必须在 JSON 中存在(或可使用 options 配置容错),类型也必须兼容。

-- JSON key 与 schema 字段名不一致
SELECT from_json('{"x":1, "y":2}', 'a INT, b INT');
-- 结果字段 a 和 b 均为 NULL

-- 正确做法:schema 字段名与 JSON key 一致
SELECT from_json('{"a":1, "b":2}', 'a INT, b INT');
📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

备注「数据仓库技术」加入社群,每日一道大厂SQL真题

交流微信二维码

你可能还想看