No MariaDB,
JSON_EXISTS()
é uma função interna que permite verificar se existe um valor em um caminho especificado no documento JSON. Ele aceita o documento JSON como argumento e retorna
1
se o caminho for encontrado e 0
se não for. A documentação do MariaDB afirma que a função “determina se um valor JSON especificado existe nos dados fornecidos”. No entanto, a função não parece realmente verificar um determinado valor. Provavelmente é mais correto dizer que determina se um caminho especificado existe ou que existe um valor no caminho especificado.
Para verificar se o valor real existe, você pode usar o
JSON_CONTAINS()
função. Sintaxe
A sintaxe fica assim:
JSON_EXISTS(json_doc, path)
Onde
json_doc
é o documento JSON e o path
é o caminho para encontrar. Exemplo
Aqui está um exemplo para demonstrar.
SELECT JSON_EXISTS('{ "name": "Wag" }', '$.name');
Resultado:
+--------------------------------------------+| JSON_EXISTS('{ "name":"Wag" }', '$.name') |+---------------------------- ----------------+| 1 |+--------------------------------------------+
Nesse caso, o caminho é encontrado e o resultado é1
.
Se o caminho não for encontrado, o resultado será0
, assim:
SELECT JSON_EXISTS('{ "name": "Wag" }', '$.type');
Resultado:
+--------------------------------------------+| JSON_EXISTS('{ "name":"Wag" }', '$.type') |+---------------------------- ----------------+| 0 |+--------------------------------------------+Matrizes
Neste exemplo, verifico a existência de um elemento em um determinado índice de uma matriz:
SELECT JSON_EXISTS( '{ "name": "Wag", "scores": [ 10, 8, 7 ] }', "$.scores[2]" ) AS Result;
Resultado:
+--------+| Resultado |+--------+| 1 |+--------+
Aqui está o que acontece se o índice não existir na matriz:
SELECT JSON_EXISTS( '{ "name": "Wag", "scores": [ 10, 8, 7 ] }', '$.scores[3]' ) AS Result;
Resultado:
+--------+| Resultado |+--------+| 0 |+--------+Documento JSON maior
Aqui está um exemplo que usa um documento JSON um pouco maior. Aqui, verifico uma chave que existe em vários níveis de aninhamento:
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_EXISTS( @json_document, '$.details.awards.Sumo 2020' ) AS Result;
Resultado:
+--------+| Resultado |+--------+| 1 |+--------+Argumentos nulos
Se algum dos argumentos forNULL
, o resultado éNULL
:
SELECT JSON_EXISTS(null, '$.a'), JSON_EXISTS('{ "a": 1 }', null);
Resultado:
+--------------------------+------------------- --------------+| JSON_EXISTS(null, '$.a') | JSON_EXISTS('{ "a":1 }', null) |+--------------------------+------- ---------------+| NULO | NULL |+--------------------------+-------------------- -------------+JSON inválido
Passando resultados JSON inválidos emNULL
:
SELECT JSON_EXISTS('{1}', '$.a');
Resultado:
+---------------------------+| JSON_EXISTS('{1}', '$.a') |+--------------------------------------+| NULL |+---------------------------+Contagem de parâmetros incorreta
Não fornecer argumentos resulta em um erro:
SELECT JSON_EXISTS();
Resultado:
ERRO 1582 (42000):contagem de parâmetro incorreta na chamada para a função nativa 'JSON_EXISTS'
É o mesmo quando você fornece muitos argumentos:
SELECT JSON_EXISTS('{"a": 1}', '$.a', 3);
Resultado:
ERRO 1582 (42000):contagem de parâmetro incorreta na chamada para a função nativa 'JSON_EXISTS'