I MySQL, JSON_VALUE()
funktion extraherar ett värde från ett JSON-dokument på den angivna sökvägen.
Funktionen introducerades i MySQL 8.0.21.
Syntax
Syntaxen ser ut så här:
JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error])
Var:
on_empty:
{NULL | ERROR | DEFAULT value} ON EMPTY
on_error:
{NULL | ERROR | DEFAULT value} ON ERROR
Exempel
Här är ett enkelt exempel att visa:
SELECT JSON_VALUE( '{ "name" : "Wag", "type" : "Dog" }', '$.type' );
Resultat:
Dog
Arrayer
Här är ett exempel på att få ett värde från en array:
SELECT JSON_VALUE( '{ "name" : "Wag", "scores" : [ 25, 36, 48 ] }', '$.scores[1]' );
Resultat:
36
Matriser är nollbaserade, så 1
returnerar det andra elementet (0
skulle returnera den första).
Inbäddade dokument
Här är ett exempel på att få ett värde från ett inbäddat objekt:
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details.type'
);
Resultat:
Dog
Returtyp
Här är ett exempel på hur du anger returtypen:
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details' RETURNING json
);
Resultat:
{"name": "Wag", "type": "Dog"}
Om du inte anger returtypen är returtypen VARCHAR(512)
.
Tömma resultat
Som standard, om ingen data hittas på den angivna sökvägen, NULL
returneras:
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
);
Resultat:
NULL
Följande alternativ kan dock användas för att explicit specificera vad som ska hända när ingen data hittas på den givna sökvägen:
NULL ON EMPTY
:Funktionen returnerarNULL
; detta är standardbeteendet.DEFAULT
:det angivnavalue
PÅ TOMvalue
returneras. Värdets typ måste matcha returtypen.ERROR ON EMPTY
:Funktionen ger ett fel.
Exempel:
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
DEFAULT 'Nothing found' ON EMPTY
);
Resultat:
Nothing found
Fel
Följande kan användas för att specificera vad som händer när ett fel uppstår:
NULL ON ERROR
:JSON_VALUE()
returnerarNULL
; detta är standardbeteendet.DEFAULT
:Detta är värdet som returneras; dess värde måste matcha returtypens värde.value
PÅ FELERROR ON ERROR
:Ett fel uppstår.
Om den används, ON EMPTY
måste föregå alla ON ERROR
klausul. Att ange dem i fel ordning resulterar i ett syntaxfel.
Index
Som nämnts i MySQL 8.0.21 release notes, JSON_VALUE()
funktionen förenklar skapandet av index på JSON
kolumner. Ett anrop till JSON_VALUE(
motsvarar att anropa json_doc
, path
RETURNERAR type
)CAST( JSON_UNQUOTE( JSON_EXTRACT(
.json_doc
, path
) ) AS type
)
Här är exemplet som används i versionskommentarerna:
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)) )
);