I MySQL er JSON_VALUE() funktion udtrækker en værdi fra et JSON-dokument på den angivne sti.
Funktionen blev introduceret i MySQL 8.0.21.
Syntaks
Syntaksen ser sådan ud:
JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error]) Hvor:
on_empty:
{NULL | ERROR | DEFAULT value} ON EMPTY
on_error:
{NULL | ERROR | DEFAULT value} ON ERROR Eksempel
Her er et simpelt eksempel til at demonstrere:
SELECT JSON_VALUE( '{ "name" : "Wag", "type" : "Dog" }', '$.type' ); Resultat:
Dog
Arrays
Her er et eksempel på at få en værdi fra et array:
SELECT JSON_VALUE( '{ "name" : "Wag", "scores" : [ 25, 36, 48 ] }', '$.scores[1]' ); Resultat:
36
Arrays er nul-baserede, så 1 returnerer det andet element (0 ville returnere den første).
Indlejrede dokumenter
Her er et eksempel på at få en værdi fra et indlejret objekt:
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details.type'
); Resultat:
Dog
Returtype
Her er et eksempel på angivelse af returtypen:
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details' RETURNING json
); Resultat:
{"name": "Wag", "type": "Dog"}
Hvis du ikke angiver returtypen, er returtypen VARCHAR(512) .
Tomme resultater
Som standard, hvis ingen data findes på den angivne sti, NULL returneres:
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
); Resultat:
NULL
Følgende muligheder kan dog bruges til eksplicit at angive, hvad der skal ske, når der ikke findes data på den givne sti:
NULL ON EMPTY:Funktionen returnererNULL; dette er standardadfærden.DEFAULT:den angivnevaluePÅ TOMvalueer returneret. Værdiens type skal matche returtypens.ERROR ON EMPTY:Funktionen giver en fejl.
Eksempel:
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
DEFAULT 'Nothing found' ON EMPTY
); Resultat:
Nothing found
Fejl
Følgende kan bruges til at angive, hvad der sker, når der opstår en fejl:
NULL ON ERROR:JSON_VALUE()returnererNULL; dette er standardadfærden.DEFAULT:Dette er den returnerede værdi; dens værdi skal matche returtypens værdi.valuePÅ FEJLERROR ON ERROR:Der opstår en fejl.
Hvis brugt, ON EMPTY skal gå forud for enhver ON ERROR klausul. Angivelse af dem i den forkerte rækkefølge resulterer i en syntaksfejl.
Indekser
Som nævnt i MySQL 8.0.21 release notes, JSON_VALUE() funktion forenkler oprettelsen af indekser på JSON kolonner. Et kald til JSON_VALUE( svarer til at kalde json_doc , path RETURNERER type )CAST( JSON_UNQUOTE( JSON_EXTRACT( .json_doc , path ) ) AS type )
Her er eksemplet brugt i udgivelsesbemærkningerne:
CREATE TABLE inventory(
items JSON,
INDEX i1 ( (JSON_VALUE(items, '$.name' RETURNING CHAR(50))) ),
INDEX i2 ( (JSON_VALUE(items, '$.price' RETURNING DECIMAL(5,2))) ),
INDEX i3 ( (JSON_VALUE(items, '$.quantity' RETURNING UNSIGNED)) )
);