Catégories :

Fonctions de données semi-structurées et 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>' )
Copy

Arguments

column_identifier

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

path_name

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 SQL et l’utilisation de : comme séparateurs de chemin.

Exemples

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

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

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
    ORDER BY id;
+--------------------------------------+--------------------------------------+
| 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"]} |
+--------------------------------------+--------------------------------------+
Copy

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
    ORDER BY id;
+----------------------+------------------------+
| OLD_WAY              | JSON_EXTRACT_PATH_TEXT |
|----------------------+------------------------|
| NULL                 | NULL                   |
| level_2_value        | level_2_value          |
| ["zero","one","two"] | ["zero","one","two"]   |
+----------------------+------------------------+
Copy

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
    ORDER BY id;
+---------+------------------------+
| OLD_WAY | JSON_EXTRACT_PATH_TEXT |
|---------+------------------------|
| NULL    | NULL                   |
| NULL    | NULL                   |
| one     | one                    |
+---------+------------------------+
Copy