In MariaDB, JSON_EXISTS()
è una funzione integrata che ti consente di verificare se esiste un valore in un percorso specificato nel documento JSON.
Accetta il documento JSON come argomento e restituisce 1
se viene trovato il percorso e 0
se non lo è.
La documentazione di MariaDB afferma che la funzione "determina se un valore JSON specificato esiste nei dati forniti". Tuttavia, la funzione in realtà non sembra verificare un determinato valore. Probabilmente è più preciso dire che determina se un percorso specificato esiste o che esiste un valore nel percorso specificato.
Per verificare che il valore effettivo esiste, puoi usare JSON_CONTAINS()
funzione.
Sintassi
La sintassi è questa:
JSON_EXISTS(json_doc, path)
Dove json_doc
è il documento JSON e il path
è il percorso da trovare.
Esempio
Ecco un esempio da dimostrare.
SELECT JSON_EXISTS('{ "name": "Wag" }', '$.name');
Risultato:
+--------------------------------------------+ | JSON_EXISTS('{ "name": "Wag" }', '$.name') | +--------------------------------------------+ | 1 | +--------------------------------------------+
In questo caso, il percorso viene trovato e il risultato è 1
.
Se il percorso non viene trovato, il risultato è 0
, in questo modo:
SELECT JSON_EXISTS('{ "name": "Wag" }', '$.type');
Risultato:
+--------------------------------------------+ | JSON_EXISTS('{ "name": "Wag" }', '$.type') | +--------------------------------------------+ | 0 | +--------------------------------------------+
Array
In questo esempio, controllo l'esistenza di un elemento in un dato indice di un array:
SELECT JSON_EXISTS(
'{
"name": "Wag",
"scores": [ 10, 8, 7 ]
}',
"$.scores[2]"
) AS Result;
Risultato:
+--------+ | Result | +--------+ | 1 | +--------+
Ecco cosa succede se l'indice non esiste nell'array:
SELECT JSON_EXISTS(
'{
"name": "Wag",
"scores": [ 10, 8, 7 ]
}',
'$.scores[3]'
) AS Result;
Risultato:
+--------+ | Result | +--------+ | 0 | +--------+
Documento JSON più grande
Ecco un esempio che utilizza un documento JSON leggermente più grande. Qui, controllo una chiave che esiste all'interno di diversi livelli di annidamento:
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;
Risultato:
+--------+ | Result | +--------+ | 1 | +--------+
Argomenti nulli
Se uno qualsiasi degli argomenti è NULL
, il risultato è NULL
:
SELECT
JSON_EXISTS(null, '$.a'),
JSON_EXISTS('{ "a": 1 }', null);
Risultato:
+--------------------------+---------------------------------+ | JSON_EXISTS(null, '$.a') | JSON_EXISTS('{ "a": 1 }', null) | +--------------------------+---------------------------------+ | NULL | NULL | +--------------------------+---------------------------------+
JSON non valido
Il passaggio di JSON non valido restituisce NULL
:
SELECT JSON_EXISTS('{1}', '$.a');
Risultato:
+---------------------------+ | JSON_EXISTS('{1}', '$.a') | +---------------------------+ | NULL | +---------------------------+
Conteggio parametri errato
Non fornire argomenti genera un errore:
SELECT JSON_EXISTS();
Risultato:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_EXISTS'
È lo stesso quando fornisci troppi argomenti:
SELECT JSON_EXISTS('{"a": 1}', '$.a', 3);
Risultato:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_EXISTS'