Catégories :

Fonctions de données semi-structurées (extraction)

JSON_EXTRACT_PATH_TEXT

Analyse le premier argument sous la forme d’une chaîne JSON et renvoie la valeur de l’élément pointé par le chemin d’accès dans le deuxième argument. Est équivalent à TO_VARCHAR(GET_PATH(PARSE_JSON(JSON), PATH))

Syntaxe

JSON_EXTRACT_PATH_TEXT( <column_identifier> , '<path_name>' )

Arguments

identificateur_colonne

Le nom de la colonne avec les données que vous souhaitez extraire.

nom_chemin

Une chaîne qui contient le chemin d’accès à l’élément que vous souhaitez extraire.

Renvoie

Le type de données de la valeur renvoyée est VARCHAR.

Notes sur l’utilisation

  • La fonction renvoie NULL si le nom du chemin ne correspond à aucun élément.

  • La syntaxe du nom de chemin est la notation standard JavaScript ; il consiste en une concaténation de noms de champs (identificateurs) précédés de points (par exemple, .) et d’opérateurs d’index (par exemple, [<index>]) :

    • Le premier nom de champ ne nécessite pas que la période de tête soit spécifiée.

    • Les valeurs d’index dans les opérateurs d’index peuvent être des entiers non négatifs (pour les tableaux) ou des littéraux de chaîne entre guillemets simples ou doubles (pour les champs d’objet).

    Pour plus de détails, voir Interrogation de données semi-structurées.

  • Pour maintenir la cohérence syntaxique, la notation de chemin prend également en charge les identificateurs entre guillemets de style SQLet l’utilisation de : comme séparateurs de chemin.

Exemples

Créer une table et insérer des valeurs :

CREATE TABLE demo1 (json_data VARCHAR);
INSERT INTO demo1 SELECT
   '{"level_1_key": "level_1_value"}';
INSERT INTO demo1 SELECT
   '{"level_1_key": {"level_2_key": "level_2_value"}}';
INSERT INTO demo1 SELECT
   '{"level_1_key": {"level_2_key": ["zero", "one", "two"]}}';

Utilisez JSON_EXTRACT_PATH_TEXT pour extraire une valeur d’une simple chaîne de niveau 1 :

SELECT 
        TO_VARCHAR(GET_PATH(PARSE_JSON(json_data), 'level_1_key')) 
            AS OLD_WAY,
        JSON_EXTRACT_PATH_TEXT(json_data, 'level_1_key')
            AS JSON_EXTRACT_PATH_TEXT
    FROM demo1;
+--------------------------------------+--------------------------------------+
| OLD_WAY                              | JSON_EXTRACT_PATH_TEXT               |
|--------------------------------------+--------------------------------------|
| level_1_value                        | level_1_value                        |
| {"level_2_key":"level_2_value"}      | {"level_2_key":"level_2_value"}      |
| {"level_2_key":["zero","one","two"]} | {"level_2_key":["zero","one","two"]} |
+--------------------------------------+--------------------------------------+

Utilisez JSON_EXTRACT_PATH_TEXT pour extraire une valeur d’une chaîne de niveau 2 à l’aide d’un chemin de niveau 2 :

SELECT 
        TO_VARCHAR(GET_PATH(PARSE_JSON(json_data), 'level_1_key.level_2_key'))
            AS OLD_WAY,
        JSON_EXTRACT_PATH_TEXT(json_data, 'level_1_key.level_2_key')
            AS JSON_EXTRACT_PATH_TEXT
    FROM demo1;
+----------------------+------------------------+
| OLD_WAY              | JSON_EXTRACT_PATH_TEXT |
|----------------------+------------------------|
| NULL                 | NULL                   |
| level_2_value        | level_2_value          |
| ["zero","one","two"] | ["zero","one","two"]   |
+----------------------+------------------------+

Cet exemple contient un tableau :

SELECT 
      TO_VARCHAR(GET_PATH(PARSE_JSON(json_data), 'level_1_key.level_2_key[1]'))
          AS OLD_WAY,
      JSON_EXTRACT_PATH_TEXT(json_data, 'level_1_key.level_2_key[1]')
          AS JSON_EXTRACT_PATH_TEXT
    FROM demo1;
+---------+------------------------+
| OLD_WAY | JSON_EXTRACT_PATH_TEXT |
|---------+------------------------|
| NULL    | NULL                   |
| NULL    | NULL                   |
| one     | one                    |
+---------+------------------------+