In MySQL der JSON_VALUE()
Funktion extrahiert einen Wert aus einem JSON-Dokument im angegebenen Pfad.
Die Funktion wurde in MySQL 8.0.21 eingeführt.
Syntax
Die Syntax sieht so aus:
JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error])
Wo:
on_empty:
{NULL | ERROR | DEFAULT value} ON EMPTY
on_error:
{NULL | ERROR | DEFAULT value} ON ERROR
Beispiel
Hier ist ein einfaches Beispiel zur Veranschaulichung:
SELECT JSON_VALUE( '{ "name" : "Wag", "type" : "Dog" }', '$.type' );
Ergebnis:
Dog
Arrays
Hier ist ein Beispiel für das Abrufen eines Werts aus einem Array:
SELECT JSON_VALUE( '{ "name" : "Wag", "scores" : [ 25, 36, 48 ] }', '$.scores[1]' );
Ergebnis:
36
Arrays sind nullbasiert, also 1
gibt das zweite Element zurück (0
würde die erste zurückgeben).
Eingebettete Dokumente
Hier ist ein Beispiel für das Abrufen eines Werts von einem eingebetteten Objekt:
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details.type'
);
Ergebnis:
Dog
Rückgabetyp
Hier ist ein Beispiel für die Angabe des Rückgabetyps:
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details' RETURNING json
);
Ergebnis:
{"name": "Wag", "type": "Dog"}
Wenn Sie den Rückgabetyp nicht angeben, ist der Rückgabetyp VARCHAR(512)
.
Leere Ergebnisse
Wenn im angegebenen Pfad keine Daten gefunden werden, wird standardmäßig NULL
wird zurückgegeben:
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
);
Ergebnis:
NULL
Die folgenden Optionen können jedoch verwendet werden, um explizit festzulegen, was passieren soll, wenn keine Daten im angegebenen Pfad gefunden werden:
NULL ON EMPTY
:Die Funktion gibtNULL
zurück; dies ist das Standardverhalten.DEFAULT
:der bereitgestelltevalue
AUF LEERvalue
ist zurück gekommen. Der Typ des Werts muss mit dem des Rückgabetyps übereinstimmen.ERROR ON EMPTY
:Die Funktion gibt einen Fehler aus.
Beispiel:
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
DEFAULT 'Nothing found' ON EMPTY
);
Ergebnis:
Nothing found
Fehler
Folgendes kann verwendet werden, um festzulegen, was passiert, wenn ein Fehler auftritt:
NULL ON ERROR
:JSON_VALUE()
gibtNULL
zurück; dies ist das Standardverhalten.DEFAULT
:Dies ist der zurückgegebene Wert; sein Wert muss mit dem des Rückgabetyps übereinstimmen.value
BEI FEHLERERROR ON ERROR
:Ein Fehler wird ausgegeben.
Falls verwendet, ON EMPTY
muss jedem ON ERROR
vorangestellt werden Klausel. Die Angabe in der falschen Reihenfolge führt zu einem Syntaxfehler.
Indizes
Wie in den Versionshinweisen zu MySQL 8.0.21 erwähnt, ist der JSON_VALUE()
Funktion vereinfacht die Erstellung von Indizes auf JSON
Säulen. Ein Aufruf von JSON_VALUE(
entspricht dem Aufruf von json_doc
, path
RETURNING type
)CAST( JSON_UNQUOTE( JSON_EXTRACT(
.json_doc
, path
) ) AS type
)
Hier ist das in den Versionshinweisen verwendete Beispiel:
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)) )
);