In MariaDB, JSON_VALUE()
is een ingebouwde functie die een scalaire waarde retourneert uit een JSON-document. Meer specifiek, het retourneert de scalaire waarde gespecificeerd door het opgegeven pad.
Syntaxis
De syntaxis gaat als volgt:
JSON_VALUE(json_doc, path)
Waar json_doc
is het JSON-document, en path
is een pad binnen het document.
Voorbeeld
Hier is een voorbeeld om te demonstreren.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_VALUE(@json_document, '$.name');
Resultaat:
+--------------------------------------+ | JSON_VALUE(@json_document, '$.name') | +--------------------------------------+ | Wag | +--------------------------------------+
Niet-bestaand pad
Het doorgeven van een pad dat niet bestaat in het JSON-document resulteert in NULL
.
Voorbeeld:
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_VALUE(@json_document, '$.color');
Resultaat:
+---------------------------------------+ | JSON_VALUE(@json_document, '$.color') | +---------------------------------------+ | NULL | +---------------------------------------+
Arrays
Hier is een voorbeeld van het retourneren van gegevens uit een array:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_VALUE(@json_document, '$.awards[1]');
Resultaat:
+-------------------------------------------+ | JSON_VALUE(@json_document, '$.awards[1]') | +-------------------------------------------+ | Best Dog | +-------------------------------------------+
Arrays zijn gebaseerd op nul, en dus $.awards[1]
extraheert het tweede element van de awards
array.
geneste objecten
Hier is een voorbeeld van het verkrijgen van een waarde van een object dat in een ander object is genest:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_VALUE(
@json_document,
'$.details.awards.Florida Dog Awards'
) AS Result;
Resultaat:
+---------+ | Result | +---------+ | Top Dog | +---------+
Niet-scale waarden
Poging om een niet-scalaire waarde te retourneren (bijvoorbeeld een object of een array) retourneert NULL
.
Voorbeeld:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_VALUE(
@json_document,
'$.details.awards'
) AS Result;
Resultaat:
+--------+ | Result | +--------+ | NULL | +--------+
Gebruik de JSON_QUERY()
. om een niet-scalaire waarde te retourneren functie of de JSON_EXTRACT()
functie.
Nullargumenten
Als een argument NULL
is , het resultaat is NULL
:
SELECT
JSON_VALUE(null, '$.type'),
JSON_VALUE('{"a":1}', null);
Resultaat:
+----------------------------+-----------------------------+ | JSON_VALUE(null, '$.type') | JSON_VALUE('{"a":1}', null) | +----------------------------+-----------------------------+ | NULL | NULL | +----------------------------+-----------------------------+
Onjuist aantal parameters
Het verstrekken van geen argumenten resulteert in een fout:
SELECT JSON_VALUE();
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_VALUE'
Hetzelfde geldt wanneer u te weinig of te veel argumenten geeft:
SELECT JSON_VALUE('{ "a": 1}');
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_VALUE'