Kategorien:

Semistrukturierte Datenfunktionen (Extraktion)

JSON_EXTRACT_PATH_TEXT

Analysiert das erste Argument als JSON-Zeichenfolge und gibt den Wert des Elements zurück, auf das der Pfad im zweiten Argument zeigt. Dies ist äquivalent zu TO_VARCHAR(GET_PATH(PARSE_JSON(JSON), PATH))

Syntax

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

Argumente

Spaltenbezeichner

Der Name der Spalte mit den Daten, die Sie extrahieren möchten.

Pfadname

Eine Zeichenfolge, die den Pfad zu dem Element enthält, das Sie extrahieren möchten.

Rückgabewerte

Der Datentyp des zurückgegebenen Werts ist VARCHAR.

Nutzungshinweise

  • Die Funktion gibt NULL zurück, wenn der Pfadname keinem Element entspricht.

  • Die Syntax für Pfadnamen besteht aus standardmäßiger JavaScript-Notation und beinhaltet eine Verkettung von Feldnamen (Bezeichnern), denen Punkte (z. B. .) und Indexoperatoren (z. B. [<Index>]) vorangestellt sind:

    • Beim ersten Feldnamen muss der führende Punkt nicht angegeben werden.

    • Die Indexwerte in den Indexoperatoren können nicht negative Ganzzahlen (bei Arrays) bzw. Zeichenfolgenliterale in einfachen oder doppelten Anführungszeichen sein (bei Objektfeldern).

    Weitere Details dazu finden Sie unter Abfragen von semistrukturierten Daten.

  • Zur Wahrung der syntaktischen Konsistenz unterstützt die Pfadnotation auch Bezeichner in SQL-artigen doppelten Anführungszeichen sowie die Verwendung von : als Pfadtrennzeichen.

Beispiele

Erstellen Sie eine Tabelle, und fügen Sie Zeilen ein:

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"]}}';

Verwenden Sie JSON_EXTRACT_PATH_TEXT, um einen Wert aus einer einfachen Ebene-1-Zeichenfolge zu extrahieren:

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"]} |
+--------------------------------------+--------------------------------------+

Verwenden Sie JSON_EXTRACT_PATH_TEXT, um einen Wert aus einer Ebene-2-Zeichenfolge mithilfe eines Ebene-2-Pfads zu extrahieren:

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"]   |
+----------------------+------------------------+

Dieses Beispiel enthält ein Array:

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                    |
+---------+------------------------+