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

MariaDB JSON_VALUE() explicado


No MariaDB, JSON_VALUE() é uma função interna que retorna um valor escalar de um documento JSON. Mais especificamente, ele retorna o escalar especificado pelo caminho fornecido.

Sintaxe


A sintaxe fica assim:
JSON_VALUE(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 =' { "name":"Wag", "type":"Dog", "weight":20 }';SELECT JSON_VALUE(@json_document, '$.name'); 

Resultado:
+--------------------------------------+| JSON_VALUE(@json_document, '$.name') |+------------------------------------------------ -+| Wag |+-------------------------------------------------+

Caminho inexistente


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

Exemplo:
SET @json_document =' { "name":"Wag", "type":"Dog", "weight":20 }';SELECT JSON_VALUE(@json_document, '$.color'); 

Resultado:
+---------------------------------------+| JSON_VALUE(@json_document, '$.color') |+------------------------------------------------ --+| NULL |+--------------------------------------------------+

Matrizes


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

Resultado:
+-------------------------------------------+| JSON_VALUE(@json_document, '$.awards[1]') |+------------------------------------------------ ---------+| Melhor Cachorro |+-------------------------------------------+ 
As matrizes são baseadas em zero e, portanto, $.awards[1] extrai o segundo elemento dos prêmios variedade.

Objetos aninhados


Aqui está um exemplo de como obter um valor de um objeto aninhado dentro de outro objeto:
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_VALUE( @json_document, '$.details.awards.Florida Dog Awards') AS Resultado; 

Resultado:
+---------+| Resultado |+---------+| Melhor cão |+---------+

Valores não escalares


A tentativa de retornar um valor não escalar (por exemplo, um objeto ou uma matriz) retorna NULL .

Exemplo:
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_VALUE( @json_document, '$.details.awards' ) Resultado AS; 

Resultado:
+--------+| Resultado |+--------+| NULO |+--------+

Para retornar um valor não escalar, use o JSON_QUERY() ou a função JSON_EXTRACT() função.

Argumentos nulos


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

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

Contagem de parâmetros incorreta


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

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

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

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