A função JSON_EXPLODE do MaxCompute decompõe (expande) cada elemento de um array JSON ou objeto JSON em vários registros de linha. Este tópico descreve o uso da função JSON_EXPLODE e apresenta exemplos.
Formato do comando
JSON_EXPLODE(JSON <var>)
Descrição dos parâmetros
var: obrigatório. Aceita os tipos JSON_ARRAY ou JSON_OBJECT. Atualmente, não há suporte para constantes JSON, JSON STRING, JSON NUMBER, JSON BOOLEAN e NULL.
Valor retornado
Retorna as linhas convertidas no seguinte formato:
+-------+-------+
| KEY | VALUE |
|-------+-------|
Quando var é do tipo JSON ARRAY, o JSON ARRAY mais externo é expandido em várias linhas de dados JSON, onde KEY é NULL e VALUE corresponde aos elementos do JSON ARRAY.
Quando var é do tipo JSON OBJECT, cada KEY e VALUE do JSON OBJECT mais externo são expandidos em linhas com duas colunas, onde a coluna KEY (tipo STRING) armazena a chave do JSON OBJECT e a coluna VALUE (tipo JSON) armazena o valor do JSON OBJECT.
Exemplos de uso
Crie a tabela table_json e insira dados, onde a primeira linha é do tipo JSON OBJECT e a segunda linha é do tipo 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;
O resultado retornado é o seguinte.
+-----------------------------+
| c1 |
+-------------------------------+
| {"a":123,"b":"hello"} |
| [1,true,2,{"a":456}] |
+-------------------------------+
Use a função JSON_EXPLODE para decompor (expandir) cada elemento do array JSON ou objeto JSON em várias linhas de saída. O exemplo de código é o seguinte.
SELECT JSON_EXPLODE(table_json.c1) FROM table_json;
O resultado retornado é o seguinte.
+-----+------------+
| key | value |
+-----+------------+
| \N | 1 |
| \N | true |
| \N | 2 |
| \N | {"a":456} |
| a | 123 |
| b | hello |
+-----+------------+
Durante a conversão de dados JSON, os elementos dentro de um mesmo registro mantêm a ordem original. No entanto, a ordem entre múltiplos registros JSON pode não ser preservada.