I MariaDB, JSON_QUERY()
är en inbyggd funktion som returnerar ett objekt eller array från ett JSON-dokument, baserat på den angivna sökvägen.
Det liknar JSON_VALUE()
funktion, förutom att den returnerar ett objekt eller en matris istället för en skalär (JSON_VALUE()
returnerar en skalär).
Syntax
Syntaxen ser ut så här:
JSON_QUERY(json_doc, sökväg)
Där json_doc
är JSON-dokumentet och sökväg
är en sökväg i dokumentet.
Exempel
Här är ett exempel att visa.
SET @json_document =' { "_id" :1, "name" :"Wag", "details" :{ "type" :"Hund", "weight" :20, "awards" :{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Faste Dog", "Sumo 2020" :"Biggest Dog" } } }';SELECT JSON_QUERY(@json_document, '$.details');
Resultat:
{ "type" :"Hund", "vikt" :20, "awards" :{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Snabbaste hund", "Sumo 2020" :"Största hund" }}
Vi kan använda punktnotation för att gå ner till nästa kapslade objekt:
SET @json_document =' { "_id" :1, "name" :"Wag", "details" :{ "type" :"Hund", "weight" :20, "awards" :{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Faste Dog", "Sumo 2020" :"Biggest Dog" } } }';SELECT JSON_QUERY(@json_document, '$.details.awards');
Resultat:
{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Faste Dog", "Sumo 2020" :"Biggest Dog"}
Arrayer
Här är ett exempel på att returnera en array:
SET @json_document =' { "_id" :1, "awards" :[ "Top Dog", "Best Dog", "Biggest Dog" ] }';SELECT JSON_QUERY(@json_document, '$. utmärkelser');
Resultat:
+--------------------------------------------------+| JSON_QUERY(@json_document, '$.awards') |+------------------------------------------------ -----+| [ "Topphund", "Bästa hund", "Största hund" ] |+-------------------------------- ----------+
Om du vill returnera ett faktiskt arrayelement, prova JSON_VALUE()
funktion.
Icke-existerande sökväg
Att skicka en sökväg som inte finns i JSON-dokumentet resulterar i NULL
.
Exempel:
SET @json_document =' { "_id" :1, "awards" :[ "Top Dog", "Best Dog", "Biggest Dog" ] }';SELECT JSON_QUERY(@json_document, '$. typ');
Resultat:
+---------------------------------------------+| JSON_QUERY(@json_document, '$.type') |+------------------------------------------------ -+| NULL |+----------------------------------------------+
Skalära värden
Ett försök att returnera ett skalärt värde returnerar NULL
.
Exempel:
SELECT JSON_QUERY('{ "weight":10 }', '$.weight');
Resultat:
+----------------------------------------------------+| JSON_QUERY('{ "weight":10 }', '$.weight') |+------------------------------------- --------------+| NULL |+----------------------------------------------------+För att returnera ett skalärt värde, använd
JSON_VALUE()
funktion.Nollargument
Om något argument är
NULL
, resultatet ärNULL
:SELECT JSON_QUERY(null, '$.type'), JSON_QUERY('{"a":1}', null);
Resultat:
+------------------------------------+---------------- ------------+| JSON_QUERY(null, '$.type') | JSON_QUERY('{"a":1}', null) |+----------------------------------+----- ------------------------+| NULL | NULL |+-----------------------------+------------------------ -----------+Felaktig parameterräkning
Att inte tillhandahålla några argument resulterar i ett fel:
VÄLJ JSON_QUERY();
Resultat:
ERROR 1582 (42000):Fel parameterantal i anropet till den inbyggda funktionen 'JSON_QUERY'Det är samma sak när du ger för få eller för många argument:
SELECT JSON_QUERY('{ "a":1}');
Resultat:
ERROR 1582 (42000):Fel parameterantal i anropet till den inbyggda funktionen 'JSON_QUERY'