JSON_EXPLODE

MaxCompute JSON_EXPLODE函数支持将JSON数组或JSON对象中的每个元素拆解(展开)成多行记录,本文为您介绍JSON_EXPLODE函数的使用详情以及示例。

命令格式

JSON_EXPLODE(JSON <var>)

参数说明

var:必填,支持JSON_ARRAY或JSON_OBJECT类型。当前暂不支持JSON常量、JSON STRING、JSON NUMBER、JSON BOOLEAN和NULL类型。

返回值说明

返回转换后的行,并以如下格式输出。

+-------+-------+
|  KEY  | VALUE |
|-------+-------|
  • 当var是JSON ARRAY类型时,将最外层JSON ARRAY展开为多行JSON数据,其中KEY为NULL,VALUE为JSON ARRAY的元素。

  • 当var是JSON OBJECT类型时,将最外层JSON OBJECT的每个KEY和VALUE展开为包含两列的行,其中KEY列(STRING类型)存储JSON OBJECT的KEY,VALUE列(JSON类型)存储JSON OBJECT的VALUE。

使用示例

创建表table_json并写入数据,其中第一行为JSON OBJECT类型,第二行为JSON ARRAY类型。

-- 创建表
CREATE TABLE table_json(c1 json);
-- 插入数据
INSERT INTO table_json(c1) SELECT JSON_OBJECT('a', 123,'b','hello');
INSERT INTO table_json(c1) SELECT JSON_ARRAY(1, true, 2, json'{"a":456}');
-- 查看表数据
SELECT * FROM table_json;

返回结果如下。

+-----------------------------+
| c1                            |
+-------------------------------+
| {"a":123,"b":"hello"}         |
| [1,true,2,{"a":456}]          |
+-------------------------------+

通过JSON_EXPLODE函数将JSON数组或JSON对象中的每个元素拆解(展开)成多行输出。代码示例如下。

SELECT JSON_EXPLODE(table_json.c1) FROM table_json;

返回结果如下。

+-----+------------+
| key | value      |
+-----+------------+
| \N  | 1          |
| \N  | true       |
| \N  | 2          |
| \N  | {"a":456}  |
| a   | 123        |
| b   | hello      |
+-----+------------+
说明

JSON数据进行转换时,同一条JSON数据内部的元素会按照原有顺序排列,多条JSON数据之间可能不会按照原有的顺序排列。