MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

MariaDB JSON_QUERY() explicado


No MariaDB, JSON_QUERY() é uma função interna que retorna um objeto ou matriz de um documento JSON, com base no caminho fornecido.

É semelhante ao JSON_VALUE() função, exceto que ela retorna um objeto ou array em vez de um escalar (JSON_VALUE() retorna um escalar).

Sintaxe


A sintaxe fica assim:
JSON_QUERY(json_doc, caminho) 

Onde json_doc é o documento JSON e path é um caminho dentro do documento.

Exemplo


Aqui está um exemplo para demonstrar.
SET @json_document =' { "_id" :1, "name" :"Wag", "details" :{ "type" :"Dog", "weight" :20, "awards" :{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Fastest Dog", "Sumo 2020" :"Biggest Dog" } } }';SELECT JSON_QUERY(@json_document, '$.details'); 

Resultado:
{ "type" :"Dog", "weight" :20, "awards" :{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Fastest Dog", "Sumo 2020" :"Maior cão" }}

Podemos usar a notação de ponto para descer até o próximo objeto aninhado:
SET @json_document =' { "_id" :1, "name" :"Wag", "details" :{ "type" :"Dog", "weight" :20, "awards" :{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Fastest Dog", "Sumo 2020" :"Biggest Dog" } } }';SELECT JSON_QUERY(@json_document, '$.details.awards'); 

Resultado:
{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Fastest Dog", "Sumo 2020" :"Biggest Dog"}

Matrizes


Aqui está um exemplo de retorno de uma matriz:
SET @json_document =' { "_id" :1, "awards" :[ "Top Dog", "Best Dog", "Biggest Dog" ] }';SELECT JSON_QUERY(@json_document, '$. prêmios'); 

Resultado:
+------------------------------------------+| JSON_QUERY(@json_document, '$.awards') |+------------------------------------------------ -----+| [ "Top Dog", "Best Dog", "Biggest Dog" ] |+-------------------------------- ----------+

Se você deseja retornar um elemento de matriz real, tente o JSON_VALUE() função.

Caminho inexistente


Passar um caminho que não existe no documento JSON resulta em NULL .

Exemplo:
SET @json_document =' { "_id" :1, "awards" :[ "Top Dog", "Best Dog", "Biggest Dog" ] }';SELECT JSON_QUERY(@json_document, '$. tipo'); 

Resultado:
+--------------------------------------+| JSON_QUERY(@json_document, '$.type') |+------------------------------------------------ -+| NULL |+-------------------------------------------------+

Valores escalares


A tentativa de retornar um valor escalar retorna NULL .

Exemplo:
SELECT JSON_QUERY('{ "peso":10 }', '$.peso'); 

Resultado:
+--------------------------------------------+| JSON_QUERY('{ "peso":10 }', '$.peso') |+------------------------------ --------------+| NULL |+--------------------------------------------+ 
Para retornar um valor escalar, use o JSON_VALUE() função.

Argumentos nulos


Se algum argumento for NULL , o resultado é NULL :
SELECT JSON_QUERY(null, '$.type'), JSON_QUERY('{"a":1}', null); 

Resultado:
+----------------------------+----------------- ------------+| JSON_QUERY(null, '$.type') | JSON_QUERY('{"a":1}', null) |+----------------------------+----- ------------------------+| NULO | NULL |+----------------------------+------------------ -----------+

Contagem de parâmetros incorreta


Não fornecer argumentos resulta em um erro:
SELECT JSON_QUERY(); 

Resultado:
ERRO 1582 (42000):contagem de parâmetro incorreta na chamada para a função nativa 'JSON_QUERY'

É o mesmo quando você fornece poucos ou muitos argumentos:
SELECT JSON_QUERY('{ "a":1}'); 

Resultado:
ERRO 1582 (42000):contagem de parâmetro incorreta na chamada para a função nativa 'JSON_QUERY'