I MariaDB, JSON_VALUE()
är en inbyggd funktion som returnerar ett skalärt värde från ett JSON-dokument. Mer specifikt returnerar den skalären som anges av den angivna sökvägen.
Syntax
Syntaxen ser ut så här:
JSON_VALUE(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 =' { "name":"Wag", "type":"Hund", "weight":20 }';SELECT JSON_VALUE(@json_document, '$.name');
Resultat:
+---------------------------------------------+| JSON_VALUE(@json_document, '$.name') |+------------------------------------------------ -+| Wag |+----------------------------------------------+
Icke-existerande sökväg
Att skicka en sökväg som inte finns i JSON-dokumentet resulterar i NULL
.
Exempel:
SET @json_document =' { "name":"Wag", "type":"Hund", "weight":20 }';SELECT JSON_VALUE(@json_document, '$.color');
Resultat:
+-----------------------------------------------+| JSON_VALUE(@json_document, '$.color') |+------------------------------------------------ --+| NULL |+-----------------------------------------------+
Arrayer
Här är ett exempel på att returnera data från en array:
SET @json_document =' { "_id" :1, "awards" :[ "Top Dog", "Best Dog", "Biggest Dog" ] }';SELECT JSON_VALUE(@json_document, '$. utmärkelser[1]');
Resultat:
+---------------------------------------------------------+| JSON_VALUE(@json_document, '$.awards[1]') |+---------------------------------------- ----------+| Bästa hund |+----------------------------------------------------+Arrayer är nollbaserade, och så
$.awards[1]
extraherar det andra elementet iawards
array.Inkapslade objekt
Här är ett exempel på att få ett värde från ett objekt kapslat inuti ett annat 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_VALUE( @json_document, '$.details.awards.Florida Dog Awards' ) AS-resultat;
Resultat:
+--------+| Resultat |+---------+| Top Dog |+---------+Ickeskalära värden
Ett försök att returnera ett icke-skalärt värde (t.ex. ett objekt eller en array) returnerar
NULL
.Exempel:
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_VALUE( @json_document, '$.details.awards' ) AS-resultat;
Resultat:
+--------+| Resultat |+--------+| NULL |+--------+För att returnera ett icke-skalärt värde, använd
JSON_QUERY()
funktion ellerJSON_EXTRACT()
funktion.Nollargument
Om något argument är
NULL
, resultatet ärNULL
:VÄLJ JSON_VALUE(null, '$.type'), JSON_VALUE('{"a":1}', null);
Resultat:
+------------------------------------+---------------- ------------+| JSON_VALUE(null, '$.type') | JSON_VALUE('{"a":1}', null) |+--------------------------------+----- ------------------------+| NULL | NULL |+-----------------------------+------------------------ -----------+Felaktig parameterräkning
Att inte tillhandahålla några argument resulterar i ett fel:
VÄLJ JSON_VALUE();
Resultat:
ERROR 1582 (42000):Fel parameterantal i anropet till den inbyggda funktionen 'JSON_VALUE'Det är samma sak när du ger för få eller för många argument:
SELECT JSON_VALUE('{ "a":1}');
Resultat:
ERROR 1582 (42000):Fel parameterantal i anropet till den inbyggda funktionen 'JSON_VALUE'