La fonction MaxCompute JSON_EXPLODE décompose (aplatit) chaque élément d'un tableau ou d'un objet JSON en plusieurs lignes. Cette rubrique présente l'utilisation de la fonction JSON_EXPLODE et propose des exemples.
Syntaxe
JSON_EXPLODE(JSON <var>)
Paramètres
var : obligatoire. Types acceptés : JSON_ARRAY ou JSON_OBJECT. Les types JSON constant, JSON STRING, JSON NUMBER, JSON BOOLEAN et NULL ne sont pas pris en charge pour le moment.
Valeur de retour
La fonction renvoie les lignes transformées au format suivant :
+-------+-------+
| KEY | VALUE |
|-------+-------|
Si var est de type JSON ARRAY, la fonction développe le tableau JSON externe en plusieurs lignes de données JSON. La colonne KEY contient la valeur NULL, tandis que la colonne VALUE contient les éléments du tableau JSON.
Si var est de type JSON OBJECT, la fonction développe chaque paire clé-valeur de l'objet JSON externe en une ligne comportant deux colonnes. La colonne KEY (type STRING) stocke la clé de l'objet JSON, et la colonne VALUE (type JSON) stocke la valeur associée.
Exemples
Créez la table table_json et insérez-y des données. La première ligne est de type JSON OBJECT, la seconde de type 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;
Le résultat obtenu est le suivant :
+-----------------------------+
| c1 |
+-------------------------------+
| {"a":123,"b":"hello"} |
| [1,true,2,{"a":456}] |
+-------------------------------+
Utilisez la fonction JSON_EXPLODE pour décomposer chaque élément d'un tableau ou d'un objet JSON en plusieurs lignes. Exemple :
SELECT JSON_EXPLODE(table_json.c1) FROM table_json;
Le résultat obtenu est le suivant :
+-----+------------+
| key | value |
+-----+------------+
| \N | 1 |
| \N | true |
| \N | 2 |
| \N | {"a":456} |
| a | 123 |
| b | hello |
+-----+------------+
Lors de la conversion des données JSON, les éléments d'une même donnée JSON conservent leur ordre d'origine. En revanche, l'ordre relatif entre plusieurs données JSON distinctes peut varier.