跳到主要内容

to_json:结构体转JSON字符串

速查结论

to_json(expr[, options]) 是 Spark SQL 中用于将给定的结构体值转换为 JSON 格式字符串的函数。

语法

to_json(expr[, options])

参数说明

参数类型说明
exprSTRUCT要转换为 JSON 字符串的结构体、数组或 Map 表达式
optionsMAP可选参数,用于指定 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_jsonget_json_object 方向相反:前者将结构化数据序列化为 JSON 字符串,后者从 JSON 字符串中提取字段。

Since: 2.2.0

📱关注公众号

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

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

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

交流微信二维码

你可能还想看