to_json:结构体转JSON字符串
速查结论
to_json(expr[, options]) 是 Spark SQL 中用于将给定的结构体值转换为 JSON 格式字符串的函数。
语法
to_json(expr[, options])
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| expr | STRUCT | 要转换为 JSON 字符串的结构体、数组或 Map 表达式 |
| options | MAP | 可选参数,用于指定 JSON 输出选项(如时间戳格式 timestampFormat 等) |
示例
> SELECT to_json(named_struct('a', 1, 'b', 2));
{"a":1,"b":2}
> SELECT to_json(named_struct('time', to_timestamp('2015-08-26', 'yyyy-MM-dd')), map('timestampFormat', 'dd/MM/yyyy'));
{"time":"26/08/2015"}
> SELECT to_json(array(named_struct('a', 1, 'b', 2)));
[{"a":1,"b":2}]
> SELECT to_json(map('a', named_struct('b', 1)));
{"a":{"b":1}}
> SELECT to_json(map(named_struct('a', 1),named_struct('b', 2)));
{"[1]":{"b":2}}
> SELECT to_json(map('a', 1));
{"a":1}
> SELECT to_json(array(map('a', 1)));
[{"a":1}]
常见报错与避坑指南
- 当 Map 的键为复杂类型(如结构体)时,键会被序列化为类似
"[1]"的格式,这可能不是用户预期的 JSON 形式,注意避免使用复杂类型作为 Map 键。 - 时间戳字段默认输出为
yyyy-MM-dd HH:mm:ss格式的字符串,可通过 options 中的timestampFormat自定义。 to_json与get_json_object方向相反:前者将结构化数据序列化为 JSON 字符串,后者从 JSON 字符串中提取字段。
Since: 2.2.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

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