Tous les produits
Search
Centre de documentation

MaxCompute:GET_JSON_OBJECT

Dernière mise à jour :Aug 10, 2026

GET_JSON_OBJECT extrait une valeur de données JSON à partir d’un chemin JSON spécifié.

Syntaxe

STRING GET_JSON_OBJECT(JSON|STRING <json>, STRING <json_path>)

Exemple : Renvoie Alice.

SELECT GET_JSON_OBJECT(JSON '{"name": "Alice", "age": 30}', '$.name');

Paramètres

json (obligatoire)

Données JSON à traiter. Deux types d’entrée sont acceptés :

  • JSON type : Valeur du type de données JSON, par exemple JSON '{"name": "Alice", "age": 30}'.

  • Type STRING : Chaîne au format JSON, telle que '{"name": "Alice", "age": 30}'. Les entrées de type chaîne doivent respecter les exigences suivantes :

    • Format : '{"Key":"Value", "Key":"Value",...}'

    • Échappez les guillemets doubles (") avec deux barres obliques inverses (\\).

    • Échappez les apostrophes (') avec une barre oblique inverse (\).

json_path (obligatoire)

Chaîne STRING spécifiant l’expression du chemin JSON. Le chemin doit commencer par $. Les caractères suivants sont pris en charge :

Caractère

Description

Exemple

$

Nœud racine

$

.

Nœud enfant (pour les objets JSON)

$.store.book

['']

Nœud enfant (syntaxe alternative ; requis lorsque la clé JSON contient un point)

$['store']['book']

[number]

Indice de tableau, à partir de 0

$.items[0]

[*]

Joker : renvoie tous les éléments d’un tableau ; ne peut pas être échappé

$.items[*]

La notation [''] nécessite SET odps.sql.udf.getjsonobj.new=true; .

Syntaxe de chemin JSON non prise en charge

GET_JSON_OBJECT ne prend pas en charge la syntaxe des expressions régulières dans les chemins JSON.

La syntaxe de chemin JSON pour le type de données JSON diffère de la spécification basée sur STRING et peut entraîner des problèmes de compatibilité.

Valeur de retour

Renvoie une chaîne STRING. La valeur de retour dépend de l’entrée :

Condition

Valeur de retour

json est valide et json_path existe

Valeur extraite sous forme de chaîne

json est vide ou son format n’est pas valide

NULL

json_path n’est pas valide

NULL

json_path contient [*]

Chaîne non tableau par défaut

Pour forcer les résultats [*] dans un format de tableau unifié, exécutez SET odps.sql.force.getjsonobj.array.format=true;.

Comportement de retour

GET_JSON_OBJECT présente deux comportements de retour contrôlés par l’indicateur odps.sql.udf.getjsonobj.new. Définissez-le au niveau de la session ou du projet.

Scénario

new=true (recommandé)

new=false

Sortie de chaîne

Renvoie la chaîne d’origine sans modification

Échappe les caractères réservés JSON (par exemple, \n'\\n', "'\\"')

Clés JSON en double

Analyse réussie, renvoie la première correspondance

Renvoie NULL

Ordre de sortie des clés

Conserve l’ordre JSON d’origine

Ordre alphabétique

Important

Nous vous recommandons d’utiliser SET odps.sql.udf.getjsonobj.new=true; pour un comportement plus standard, un traitement des données simplifié et des performances améliorées. Si votre projet MaxCompute comporte des tâches existantes qui dépendent du comportement d’échappement des caractères réservés JSON, continuez à utiliser le comportement d’origine jusqu’à ce que vous ayez vérifié que le changement ne provoque ni erreurs ni problèmes d’exactitude.

Exemple : Vérifier le comportement actuel de votre projet

SELECT GET_JSON_OBJECT('{"a":"[\\"1\\"]"}', '$.a');
-- Behavior: escape JSON reserved characters → returns [\"1\"]
-- Behavior: preserve original string       → returns ["1"]

Comportement par défaut selon la date de création du projet

  • Projets créés le 21 janvier 2021 ou après : conservent les chaînes d’origine (comportement new=true)

  • Projets créés avant le 21 janvier 2021 : échappent les caractères réservés JSON (comportement new=false)

Pour basculer le paramètre par défaut de votre projet vers la conservation des chaînes d’origine sans définir l’indicateur dans chaque session, soumettez un ticket.

L’activation du mode de compatibilité Hive (SET odps.sql.hive.compatible=true;) conserve également les chaînes d’origine.

Remarques sur l'utilisation

Performance : évitez d’appeler GET_JSON_OBJECT plusieurs fois sur le même JSON

Chaque appel analyse indépendamment la chaîne JSON. L’appeler plusieurs fois sur la même ligne est inefficace. Pour éviter une analyse répétée, utilisez GET_JSON_OBJECT avec une fonction table définie par l’utilisateur (UDTF) afin de transformer les données des journaux JSON. Pour plus d’informations, consultez Convertir les données des journaux JSON à l’aide des fonctions intégrées MaxCompute et des UDTF.

Exemples

Entrée JSON

Obtenir une valeur par clé

-- Returns 1.
SELECT GET_JSON_OBJECT(JSON '{"a":1, "b":2}', '$.a');

-- Returns NULL (key does not exist).
SELECT GET_JSON_OBJECT(JSON '{"a":1, "b":2}', '$.c');

Un json_path non valide renvoie NULL

-- Returns NULL.
SELECT GET_JSON_OBJECT(JSON '{"a":1, "b":2}', '$invalid_json_path');

Entrée STRING

Extraire d’un objet JSON imbriqué

-- Prepare sample data.
CREATE TABLE IF NOT EXISTS src_json (json STRING);

INSERT OVERWRITE TABLE src_json VALUES
('{"store":
  {"fruit":[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}],
   "bicycle":{"price":19.95,"color":"red"}},
  "email":"amy@only_for_json_udf_test.net",
  "owner":"amy"}');

-- Returns amy.
SELECT GET_JSON_OBJECT(src_json.json, '$.owner') FROM src_json;

-- Returns {"weight":8,"type":"apple"} (preserves original string).
SET odps.sql.udf.getjsonobj.new=true;
SELECT GET_JSON_OBJECT(src_json.json, '$.store.fruit[0]') FROM src_json;

-- Returns NULL (field does not exist).
SELECT GET_JSON_OBJECT(src_json.json, '$.non_exist_key') FROM src_json;

Extraire d’un tableau JSON

-- Returns 2222.
SELECT GET_JSON_OBJECT('{"array":[["aaaa",1111],["bbbb",2222],["cccc",3333]]}', '$.array[1][1]');

-- Returns ["h0","h1","h2"] (wildcard, preserves original string).
SET odps.sql.udf.getjsonobj.new=true;
SELECT GET_JSON_OBJECT('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}', '$.ccc.hhh[*]');

-- Returns h1.
SELECT GET_JSON_OBJECT('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}', '$.ccc.hhh[1]');

Clés contenant un point (.)

Utilisez [''] pour accéder aux clés JSON qui contiennent un point. Cela nécessite SET odps.sql.udf.getjsonobj.new=true;.

-- Prepare sample data.
CREATE TABLE json_test (id STRING, json STRING);

-- Key contains a period.
INSERT INTO TABLE json_test (id, json) VALUES
("1", "{\"China.beijing\":{\"school\":{\"id\":0,\"book\":[{\"title\":\"A\",\"price\":8.95},{\"title\":\"B\",\"price\":10.2}]}}}");

-- Key does not contain a period.
INSERT INTO TABLE json_test (id, json) VALUES
("2", "{\"China_beijing\":{\"school\":{\"id\":0,\"book\":[{\"title\":\"A\",\"price\":8.95},{\"title\":\"B\",\"price\":10.2}]}}}");

-- Use [''] to extract from a key with a period. Returns 0.
SELECT GET_JSON_OBJECT(json, "$['China.beijing'].school['id']") FROM json_test WHERE id = 1;

-- Both . and [''] work for keys without special characters. Both return 0.
SELECT GET_JSON_OBJECT(json, "$['China_beijing'].school['id']") FROM json_test WHERE id = 2;
SELECT GET_JSON_OBJECT(json, "$.China_beijing.school['id']") FROM json_test WHERE id = 2;

[''] avec l’indicateur de nouveau comportement

SET odps.sql.udf.getjsonobj.new=true;

-- Returns 1.
SELECT GET_JSON_OBJECT('{"a.1":"1","a":"2"}', '$[\'a.1\']');

Entrée JSON vide ou non valide

-- Returns NULL (empty input).
SELECT GET_JSON_OBJECT('', '$.array[1][1]');

-- Returns NULL (missing outer braces).
SELECT GET_JSON_OBJECT('"array":["aaaa",1111],"bbbb":["cccc",3333]', '$.array[1][1]');

Caractères échappés dans les valeurs de chaîne

SET odps.sql.udf.getjsonobj.new=true;

-- Returns "1".
SELECT GET_JSON_OBJECT('{"a":"\\"1\\"","b":"2"}', '$.a');

-- Returns '1'.
SELECT GET_JSON_OBJECT('{"a":"\'1\'","b":"2"}', '$.a');

Caractères emoji

-- Returns the emoji symbol.
SELECT GET_JSON_OBJECT('{"a":"<Emoji symbol>"}', '$.a');
DataWorks ne prend pas en charge la saisie directe de caractères emoji. Utilisez un outil tel que Data Integration pour écrire des chaînes emoji encodées dans MaxCompute, puis traitez-les avec GET_JSON_OBJECT .

Étapes suivantes