In MariaDB, JSON_EXISTS()
is een ingebouwde functie waarmee u kunt controleren of een waarde bestaat op een opgegeven pad in het JSON-document.
Het accepteert het JSON-document als argument en retourneert 1
als het pad is gevonden, en 0
als dat niet het geval is.
De MariaDB-documentatie stelt dat de functie "bepaalt of een gespecificeerde JSON-waarde bestaat in de gegeven gegevens". De functie lijkt echter niet echt te controleren op een bepaalde waarde. Het is waarschijnlijk nauwkeuriger om te zeggen dat het bepaalt of een gespecificeerd pad bestaat, of dat er een waarde bestaat op het opgegeven pad.
Om te controleren of de werkelijke waarde bestaat, kunt u de JSON_CONTAINS()
. gebruiken functie.
Syntaxis
De syntaxis gaat als volgt:
JSON_EXISTS(json_doc, path)
Waar json_doc
is het JSON-document en path
is het pad om te vinden.
Voorbeeld
Hier is een voorbeeld om te demonstreren.
SELECT JSON_EXISTS('{ "name": "Wag" }', '$.name');
Resultaat:
+--------------------------------------------+ | JSON_EXISTS('{ "name": "Wag" }', '$.name') | +--------------------------------------------+ | 1 | +--------------------------------------------+
In dit geval is het pad gevonden en is het resultaat 1
.
Als het pad niet wordt gevonden, is het resultaat 0
, zoals dit:
SELECT JSON_EXISTS('{ "name": "Wag" }', '$.type');
Resultaat:
+--------------------------------------------+ | JSON_EXISTS('{ "name": "Wag" }', '$.type') | +--------------------------------------------+ | 0 | +--------------------------------------------+
Arrays
In dit voorbeeld controleer ik op het bestaan van een element in een bepaalde index van een array:
SELECT JSON_EXISTS(
'{
"name": "Wag",
"scores": [ 10, 8, 7 ]
}',
"$.scores[2]"
) AS Result;
Resultaat:
+--------+ | Result | +--------+ | 1 | +--------+
Dit is wat er gebeurt als de index niet in de array bestaat:
SELECT JSON_EXISTS(
'{
"name": "Wag",
"scores": [ 10, 8, 7 ]
}',
'$.scores[3]'
) AS Result;
Resultaat:
+--------+ | Result | +--------+ | 0 | +--------+
Groter JSON-document
Hier is een voorbeeld dat een iets groter JSON-document gebruikt. Hier controleer ik op een sleutel die bestaat binnen verschillende niveaus van nesting:
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;
Resultaat:
+--------+ | Result | +--------+ | 1 | +--------+
Nullargumenten
Als een van de argumenten NULL
. is , het resultaat is NULL
:
SELECT
JSON_EXISTS(null, '$.a'),
JSON_EXISTS('{ "a": 1 }', null);
Resultaat:
+--------------------------+---------------------------------+ | JSON_EXISTS(null, '$.a') | JSON_EXISTS('{ "a": 1 }', null) | +--------------------------+---------------------------------+ | NULL | NULL | +--------------------------+---------------------------------+
Ongeldige JSON
Het doorgeven van ongeldige JSON resulteert in NULL
:
SELECT JSON_EXISTS('{1}', '$.a');
Resultaat:
+---------------------------+ | JSON_EXISTS('{1}', '$.a') | +---------------------------+ | NULL | +---------------------------+
Onjuist aantal parameters
Het verstrekken van geen argumenten resulteert in een fout:
SELECT JSON_EXISTS();
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_EXISTS'
Het is hetzelfde als je te veel argumenten geeft:
SELECT JSON_EXISTS('{"a": 1}', '$.a', 3);
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_EXISTS'