I MariaDB, JSON_VALUE()
er en indbygget funktion, der returnerer en skalarværdi fra et JSON-dokument. Mere specifikt returnerer den den skalar, der er angivet af den angivne sti.
Syntaks
Syntaksen ser sådan ud:
JSON_VALUE(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 =' { "name":"Wag", "type":"Hund", "weight":20 }';SELECT JSON_VALUE(@json_document, '$.name');
Resultat:
+---------------------------------------------+| JSON_VALUE(@json_document, '$.name') |+------------------------------------------------ -+| Wag |+---------------------------------------------+
Ikke-eksisterende sti
At sende en sti, der ikke findes i JSON-dokumentet, resulterer i NULL
.
Eksempel:
SET @json_document =' { "name":"Wag", "type":"Hund", "weight":20 }';SELECT JSON_VALUE(@json_document, '$.color');
Resultat:
+----------------------------------------------+| JSON_VALUE(@json_document, '$.color') |+------------------------------------------------ --+| NULL |+-----------------------------------------------+
Arrays
Her er et eksempel på returnering af data fra et array:
SET @json_document =' { "_id" :1, "awards" :[ "Tophund", "Bedste hund", "Største hund" ] }';SELECT JSON_VALUE(@json_document, '$. priser[1]');
Resultat:
+----------------------------------------------+| JSON_VALUE(@json_document, '$.awards[1]') |+---------------------------------------- ----------+| Bedste hund |+----------------------------------------------------+Arrays er nul-baserede, og derfor
$.awards[1]
udtrækker det andet element iawards
array.Indlejrede objekter
Her er et eksempel på at få en værdi fra et objekt indlejret i et andet 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_VALUE( @json_document, '$.details.awards.Florida Dog Awards' ) AS Resultat;
Resultat:
+--------+| Resultat |+--------+| Tophund |+---------+Ikke-skalære værdier
Forsøg på at returnere en ikke-skalær værdi (f.eks. et objekt eller en matrix) returnerer
NULL
.Eksempel:
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_VALUE( @json_document, '$.details.awards' ) AS resultat;
Resultat:
+--------+| Resultat |+--------+| NULL |+--------+For at returnere en ikke-skalær værdi skal du bruge
JSON_QUERY()
funktion ellerJSON_EXTRACT()
funktion.Nul-argumenter
Hvis et argument er
NULL
, resultatet erNULL
:VÆLG JSON_VALUE(null, '$.type'), JSON_VALUE('{"a":1}', null);
Resultat:
+------------------------------------+---------------- ------------+| JSON_VALUE(null, '$.type') | JSON_VALUE('{"a":1}', null) |+--------------------------------+----- ------------------------+| NULL | NULL |+-----------------------------+------------------------ -----------+Forkert parameterantal
Angivelse af ingen argumenter resulterer i en fejl:
VÆLG JSON_VALUE();
Resultat:
FEJL 1582 (42000):Forkert parameterantal i kaldet til den oprindelige funktion 'JSON_VALUE'Det er det samme, når du giver for få eller for mange argumenter:
SELECT JSON_VALUE('{ "a":1}');
Resultat:
FEJL 1582 (42000):Forkert parameterantal i kaldet til den oprindelige funktion 'JSON_VALUE'