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êmiosvariedade.
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'