Categorias:

Funções de dados semiestruturados e estruturados (Extração)

JSON_EXTRACT_PATH_TEXT

Analisa o primeiro argumento como uma cadeia de caracteres JSON e retorna o valor do elemento apontado pelo caminho no segundo argumento. Isso é equivalente a TO_VARCHAR(GET_PATH(PARSE_JSON(JSON), PATH))

Sintaxe

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

Argumentos

column_identifier

O nome da coluna com os dados que você deseja extrair.

path_name

Uma cadeia de caracteres que contém o caminho para o elemento que você quer extrair.

Retornos

O tipo de dados do valor retornado é VARCHAR.

Notas de uso

  • A função retorna NULL se o nome do caminho não corresponder a nenhum elemento.

  • A sintaxe do nome do caminho é a notação padrão JavaScript; ela consiste em uma concatenação de nomes de campo (identificadores) precedida por pontos (por exemplo, .) e operadores de índice (por exemplo, [<índice>]):

    • O primeiro nome de campo não exige que o período principal seja especificado.

    • Os valores do índice nos operadores de índice podem ser inteiros não negativos (para matrizes) ou literais de cadeia de caracteres de caracteres com aspas simples ou duplas (para campos de objetos).

    Para obter mais detalhes, consulte Consulta de dados semiestruturados.

  • Para manter a consistência sintática, a notação do caminho também oferece suporte a identificadores no estilo SQL de aspas duplas, e o uso de : como separadores de caminho.

Exemplos

Criar uma tabela e inserir valores:

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

Usar JSON_EXTRACT_PATH_TEXT para extrair um valor de uma cadeia de caracteres simples de nível 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

Usar JSON_EXTRACT_PATH_TEXT para extrair um valor de uma cadeia de caracteres de nível 2 usando um caminho de nível 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

Este exemplo contém uma matriz:

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