I MariaDB, JSON_QUERY()
er en indbygget funktion, der returnerer et objekt eller array fra et JSON-dokument, baseret på den angivne sti.
Det ligner JSON_VALUE()
funktion, bortset fra at den returnerer et objekt eller en matrix i stedet for en skalar (JSON_VALUE()
returnerer en skalar).
Syntaks
Syntaksen ser sådan ud:
JSON_QUERY(json_doc, sti)
Hvor json_doc
er JSON-dokumentet og sti
er en sti i dokumentet.
Eksempel
Her er et eksempel til at demonstrere.
SET @json_document =' { "_id" :1, "name" :"Wag", "details" :{ "type" :"Hund", "vægt" :20, "awards" :{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Hurtigste hund", "Sumo 2020" :"Biggest Dog" } } }';SELECT JSON_QUERY(@json_document, '$.details');
Resultat:
{ "type" :"Hund", "vægt" :20, "awards" :{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Hurtigste hund", "Sumo 2020" :"Største hund" }}
Vi kan bruge punktnotation til at gå ned til det næste indlejrede objekt:
SET @json_document =' { "_id" :1, "name" :"Wag", "details" :{ "type" :"Hund", "vægt" :20, "awards" :{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Hurtigste hund", "Sumo 2020" :"Biggest Dog" } } }';SELECT JSON_QUERY(@json_document, '$.details.awards');
Resultat:
{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Fastest Dog", "Sumo 2020" :"Biggest Dog"}
Arrays
Her er et eksempel på returnering af et array:
SET @json_document =' { "_id" :1, "awards" :[ "Tophund", "Bedste hund", "Største hund" ] }';SELECT JSON_QUERY(@json_document, '$. priser');
Resultat:
+--------------------------------------------------+| JSON_QUERY(@json_document, '$.awards') |+------------------------------------------------ -----+| [ "Tophund", "Bedste hund", "Største hund" ] |+-------------------------------- ----------+
Hvis du vil returnere et faktisk array-element, så prøv JSON_VALUE()
funktion.
Ikke-eksisterende sti
At sende en sti, der ikke findes i JSON-dokumentet, resulterer i NULL
.
Eksempel:
SET @json_document =' { "_id" :1, "awards" :[ "Tophund", "Bedste hund", "Største hund" ] }';SELECT JSON_QUERY(@json_document, '$. type');
Resultat:
+---------------------------------------------+| JSON_QUERY(@json_document, '$.type') |+------------------------------------------------ -+| NULL |+----------------------------------------------+
Skalære værdier
Forsøg på at returnere en skalarværdi returnerer NULL
.
Eksempel:
SELECT JSON_QUERY('{ "vægt":10 }', '$.vægt');
Resultat:
+----------------------------------------------------+| JSON_QUERY('{ "vægt":10 }', '$.vægt') |+------------------------------------ --------------+| NULL |+----------------------------------------------------+For at returnere en skalær værdi skal du bruge
JSON_VALUE()
funktion.Nul-argumenter
Hvis et argument er
NULL
, resultatet erNULL
:SELECT JSON_QUERY(null, '$.type'), JSON_QUERY('{"a":1}', null);
Resultat:
+------------------------------------+---------------- ------------+| JSON_QUERY(null, '$.type') | JSON_QUERY('{"a":1}', null) |+---------------------------+----- ------------------------+| NULL | NULL |+-----------------------------+------------------------ -----------+Forkert parameterantal
Angivelse af ingen argumenter resulterer i en fejl:
VÆLG JSON_QUERY();
Resultat:
FEJL 1582 (42000):Forkert parameterantal i kaldet til den oprindelige funktion 'JSON_QUERY'Det er det samme, når du giver for få eller for mange argumenter:
SELECT JSON_QUERY('{ "a":1}');
Resultat:
FEJL 1582 (42000):Forkert parameterantal i kaldet til den oprindelige funktion 'JSON_QUERY'