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 dosprê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) retornaNULL
.
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 oJSON_QUERY()
ou a funçãoJSON_EXTRACT()
função.
Argumentos nulos
Se algum argumento forNULL
, 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'