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 opgegevenvalueOP LEEGvaluewordt 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.valueOP 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)) )
);