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 iawardsarray.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'