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 for NULL , 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 em NULL :
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'