Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

JSON_EXTRACT() – Retornar dados de um documento JSON no MySQL


No MySQL, o JSON_EXTRACT() A função retorna dados de um documento JSON. Os dados reais retornados são determinados pelo caminho que você fornece como argumento.

Você fornece o documento JSON como o primeiro argumento, seguido pelo caminho dos dados a serem retornados. Você também pode fornecer vários caminhos para retornar dados de vários locais no documento.


Sintaxe


A sintaxe fica assim:
JSON_EXTRACT(json_doc, path[, path] ...)

Onde json_doc é o documento JSON e o path é o caminho para o valor a ser retornado.

Se for possível que esses argumentos retornem vários valores, os valores correspondentes são encapsulados automaticamente como uma matriz, na ordem correspondente aos caminhos que os produziram.

Exemplo 1 – Uso básico


Aqui está um exemplo para demonstrar.
SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": 3}', '$.b') AS 'Result';

Resultado:
+--------+
| Result |
+--------+
| 2      |
+--------+

Neste caso, retornamos o valor da chave b .

Aqui está outro exemplo:
SELECT 
  JSON_EXTRACT('{"Name": "Bart", "Age": 10}', '$.Name') AS 'Result';

Resultado:
+--------+
| Result |
+--------+
| "Bart" |
+--------+

Exemplo 2 – Caminho inexistente


Se você especificar um caminho que não existe, um valor NULL será retornado.
SELECT 
  JSON_EXTRACT('{"Name": "Homer", "Age": 39}', '$.Gender') AS 'Result';

Resultado:
+--------+
| Result |
+--------+
| NULL   |
+--------+

Você também obterá um valor NULL se algum dos argumentos for NULL .

Exemplo 3 – Matrizes


Aqui está um exemplo usando uma matriz.
SELECT JSON_EXTRACT('[1, 2, 3]', '$[2]') AS 'Result';

Resultado:
+--------+
| Result |
+--------+
| 3      |
+--------+

As matrizes usam numeração baseada em zero, portanto, nesse caso, o terceiro elemento é substituído.

Aqui está outro exemplo de matriz. Desta vez, retornamos um valor de um array aninhado.
SELECT JSON_EXTRACT('[1, 2, [3, 4, 5]]', '$[2][1]') AS 'Result';

Resultado:
+--------+
| Result |
+--------+
| 4      |
+--------+

Exemplo 4 – Vários caminhos


Você pode especificar mais de um caminho para retornar dados de vários locais no documento JSON.

Exemplo básico:
SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1]', '$[3]') AS 'Result';

Resultado:
+--------+
| Result |
+--------+
| [2, 4] |
+--------+

Exemplo 5 – Um documento JSON maior


Aqui está um exemplo com um documento JSON um pouco maior.
SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Age": 39,
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_EXTRACT(@data, '$.Person.Name', '$.Person.Age', '$.Person.Hobbies') AS 'Result';

Resultado:
+---------------------------------------+
| Result                                |
+---------------------------------------+
| ["Homer", 39, ["Eating", "Sleeping"]] |
+---------------------------------------+

Também podemos escolher um elemento específico do array, se necessário:
SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Age": 39,
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_EXTRACT(@data, '$.Person.Name', '$.Person.Age', '$.Person.Hobbies[1]') AS 'Result';

Resultado:
+---------------------------+
| Result                    |
+---------------------------+
| ["Homer", 39, "Sleeping"] |
+---------------------------+