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 oJSON_VALUE()
função.
Argumentos nulos
Se algum argumento forNULL
, 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'