I MariaDB, JSON_EXISTS()
er en indbygget funktion, der giver dig mulighed for at kontrollere, om der findes en værdi ved en specificeret sti i JSON-dokumentet.
Den accepterer JSON-dokumentet som et argument og returnerer 1
hvis stien er fundet, og 0
hvis det ikke er.
MariaDB-dokumentationen siger, at funktionen "bestemmer, om der findes en specificeret JSON-værdi i de givne data". Funktionen ser dog ikke ud til at tjekke for en given værdi. Det er nok mere præcist at sige, at det bestemmer, om en specificeret sti eksisterer, eller at der findes en værdi ved den angivne sti.
For at kontrollere, at den faktiske værdi eksisterer, kan du bruge JSON_CONTAINS()
funktion.
Syntaks
Syntaksen ser sådan ud:
JSON_EXISTS(json_doc, path)
Hvor json_doc
er JSON-dokumentet og path
er vejen til at finde.
Eksempel
Her er et eksempel til at demonstrere.
SELECT JSON_EXISTS('{ "name": "Wag" }', '$.name');
Resultat:
+----------------------------------------------------+| JSON_EXISTS('{ "name":"Wag" }', '$.name') |+-------------------------------- ----------------+| 1 |+----------------------------------------------------+I dette tilfælde er stien fundet, og resultatet er
1
.Hvis stien ikke findes, er resultatet
0
, sådan her:SELECT JSON_EXISTS('{ "name": "Wag" }', '$.type');
Resultat:
+----------------------------------------------------+| JSON_EXISTS('{ "navn":"Wag" }', '$.type') |+---------------------------- ----------------+| 0 |+----------------------------------------------------+Arrays
I dette eksempel tjekker jeg for eksistensen af et element ved et givet indeks af et array:
SELECT JSON_EXISTS( '{ "name": "Wag", "scores": [ 10, 8, 7 ] }', "$.scores[2]" ) AS Result;
Resultat:
+--------+| Resultat |+--------+| 1 |+--------+Her er, hvad der sker, hvis indekset ikke findes i arrayet:
SELECT JSON_EXISTS( '{ "name": "Wag", "scores": [ 10, 8, 7 ] }', '$.scores[3]' ) AS Result;
Resultat:
+--------+| Resultat |+--------+| 0 |+--------+Større JSON-dokument
Her er et eksempel, der bruger et lidt større JSON-dokument. Her tjekker jeg efter en nøgle, der findes inden for flere niveauer af indlejring:
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;
Resultat:
+--------+| Resultat |+--------+| 1 |+--------+Nul-argumenter
Hvis nogle af argumenterne er
NULL
, resultatet erNULL
:SELECT JSON_EXISTS(null, '$.a'), JSON_EXISTS('{ "a": 1 }', null);
Resultat:
+---------------------------+------------------------ --------------+| JSON_EXISTS(null, '$.a') | JSON_EXISTS('{ "a":1 }', null) |+--------------------------+------- --------------------------+| NULL | NULL |+----------------------------+------------------------ -------------+Ugyldig JSON
Overførsel af ugyldig JSON resulterer i
NULL
:SELECT JSON_EXISTS('{1}', '$.a');
Resultat:
+--------------------------------+| JSON_EXISTS('{1}', '$.a') |+--------------------------+| NULL |+----------------------------+Forkert parameterantal
Angivelse af ingen argumenter resulterer i en fejl:
SELECT JSON_EXISTS();
Resultat:
FEJL 1582 (42000):Forkert parameterantal i kaldet til den oprindelige funktion 'JSON_EXISTS'Det er det samme, når du giver for mange argumenter:
SELECT JSON_EXISTS('{"a": 1}', '$.a', 3);
Resultat:
FEJL 1582 (42000):Forkert parameterantal i kaldet til den oprindelige funktion 'JSON_EXISTS'