In MySQL is de JSON_VALUE()
functie extraheert een waarde uit een JSON-document op het opgegeven pad.
De functie is geïntroduceerd in MySQL 8.0.21.
Syntaxis
De syntaxis gaat als volgt:
JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error])
Waar:
on_empty:
{NULL | ERROR | DEFAULT value} ON EMPTY
on_error:
{NULL | ERROR | DEFAULT value} ON ERROR
Voorbeeld
Hier is een eenvoudig voorbeeld om te demonstreren:
SELECT JSON_VALUE( '{ "name" : "Wag", "type" : "Dog" }', '$.type' );
Resultaat:
Dog
Arrays
Hier is een voorbeeld van het verkrijgen van een waarde uit een array:
SELECT JSON_VALUE( '{ "name" : "Wag", "scores" : [ 25, 36, 48 ] }', '$.scores[1]' );
Resultaat:
36
Arrays zijn gebaseerd op nul, dus 1
geeft het tweede element terug (0
zou de eerste teruggeven).
Ingesloten documenten
Hier is een voorbeeld van het verkrijgen van een waarde van een ingesloten object:
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details.type'
);
Resultaat:
Dog
Retourtype
Hier is een voorbeeld van het specificeren van het retourtype:
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details' RETURNING json
);
Resultaat:
{"name": "Wag", "type": "Dog"}
Als u het retourtype niet opgeeft, is het retourtype VARCHAR(512)
.
Resultaten leegmaken
Als er geen gegevens worden gevonden op het opgegeven pad, wordt standaard NULL
wordt geretourneerd:
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
);
Resultaat:
NULL
De volgende opties kunnen echter worden gebruikt om expliciet te specificeren wat er moet gebeuren als er geen gegevens worden gevonden op het opgegeven pad:
NULL ON EMPTY
:De functie retourneertNULL
; dit is het standaardgedrag.DEFAULT
:de opgegevenvalue
OP LEEGvalue
wordt teruggestuurd. Het type van de waarde moet overeenkomen met dat van het retourtype.ERROR ON EMPTY
:De functie geeft een fout.
Voorbeeld:
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
DEFAULT 'Nothing found' ON EMPTY
);
Resultaat:
Nothing found
Fouten
Het volgende kan worden gebruikt om aan te geven wat er gebeurt als er een fout optreedt:
NULL ON ERROR
:JSON_VALUE()
retourneertNULL
; dit is het standaardgedrag.DEFAULT
:Dit is de geretourneerde waarde; de waarde ervan moet overeenkomen met die van het retourtype.value
OP FOUTERROR ON ERROR
:Er is een fout opgetreden.
Indien gebruikt, ON EMPTY
moet voorafgaan aan een ON ERROR
clausule. Als u ze in de verkeerde volgorde specificeert, resulteert dit in een syntaxisfout.
Indexen
Zoals vermeld in de MySQL 8.0.21 release-opmerkingen, is de JSON_VALUE()
functie vereenvoudigt het maken van indexen op JSON
kolommen. Een aanroep naar JSON_VALUE(
is gelijk aan het aanroepen van json_doc
, path
TERUGKEER type
)CAST( JSON_UNQUOTE( JSON_EXTRACT(
.json_doc
) , path
) ) AS type
)
Dit is het voorbeeld dat wordt gebruikt in de release-opmerkingen:
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)) )
);