In MariaDB JSON_EXTRACT()
ist eine integrierte Funktion, die Daten aus einem JSON-Dokument basierend auf einem oder mehreren angegebenen Pfaden extrahiert.
Es kann einzelne Werte und mehrere Werte zurückgeben. Wenn ein einzelner Wert übereinstimmt, wird ein einzelner Wert zurückgegeben. Wenn mehrere Werte übereinstimmen, werden diese Werte in einem Array zurückgegeben.
Syntax
Die Syntax lautet wie folgt:
JSON_EXTRACT(json_doc, path[, path] ...)
Wobei json_doc
ist das JSON-Dokument und jeder path
Argument ist ein Pfad innerhalb des Dokuments.
Beispiel
Hier ist ein Beispiel zur Veranschaulichung.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_EXTRACT(@json_document, '$.name');
Ergebnis:
+----------------------------------------+| JSON_EXTRACT(@json_document, '$.name') |+------------------------------------- ---+| "Wag" |+----------------------------------------+
Mehrere Pfade
Hier ist ein Beispiel für die Angabe mehrerer Pfade, um mehrere Werte aus dem JSON-Dokument zurückzugeben.
Wenn Sie mehrere Werte zurückgeben, werden sie in einem Array zurückgegeben.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_EXTRACT(@json_document, '$.name', '$.weight');
Ergebnis:
Nicht vorhandene Pfade
Das Übergeben eines Pfads, der im JSON-Dokument nicht vorhanden ist, führt zu NULL
.
Beispiel:
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_EXTRACT(@json_document, '$.color');
Ergebnis:
+------------------------------------+| JSON_EXTRACT(@json_document, '$.color') |+------------------------------------- ----+| NULL |+------------------------------------+
Wenn jedoch mehrere Pfade übergeben werden und mindestens einer davon übereinstimmt, wird der übereinstimmende Wert extrahiert und in einem Array zurückgegeben. Dies gilt auch dann, wenn nur ein Wert extrahiert wird.
Beispiel:
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_EXTRACT(@json_document, '$.name', '$.color');
Ergebnis:
Arrays
Hier ist ein Beispiel für das Extrahieren von Daten aus einem Array:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_EXTRACT(@json_document, '$.awards[0]');
Ergebnis:
+---------------------------------------------+ | JSON_EXTRACT(@json_document, '$.awards[0]') |+---------------------------------------------- -----------+| "Platzhirsch" |+-------------------------------------------------------- -+
Arrays sind nullbasiert, also $.awards[0]
extrahiert das erste Element der awards
Array.
Verschachtelte Objekte
Hier ist ein Beispiel für das Extrahieren von Daten aus einem Objekt, das in einem anderen Objekt verschachtelt ist:
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_EXTRACT(
@json_document,
'$.details.awards.New York Marathon'
) AS Result;
Ergebnis:
+---------------+| Ergebnis |+---------------+| "Schnellster Hund" |+---------------+
Wenn wir jedoch alle Auszeichnungen extrahieren wollten, könnten wir den Pfad zu $.details.awards
verkürzen :
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_EXTRACT(
@json_document,
'$.details.awards'
) AS Result;
Ergebnis:
Das Ergebnis verschönern
Wir können das Ergebnis leichter lesbar machen, indem wir JSON_EXTRACT()
übergeben zu JSON_DETAILED()
Funktion:
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_DETAILED(
JSON_EXTRACT(
@json_document,
'$.details.awards'
)
) AS Result;
Ergebnis:
Null-Argumente
Wenn irgendein Argument NULL
ist , ist das Ergebnis NULL
:
SELECT
JSON_EXTRACT(null, '$.type'),
JSON_EXTRACT('{"a":1}', null);
Ergebnis:
+------------------------------+--------------- ----------------+| JSON_EXTRACT(null, '$.type') | JSON_EXTRACT('{"a":1}', null) |+------------------------------+--- ----------------------------+| NULL | NULL |+------------------------------+---------------- ---------------+
Falsche Parameteranzahl
Wenn Sie keine Argumente angeben, wird ein Fehler ausgegeben:
SELECT JSON_EXTRACT();
Ergebnis:
FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_EXTRACT“
Das Gleiche gilt, wenn Sie zu wenige oder zu viele Argumente angeben:
SELECT JSON_EXTRACT('{ "a": 1}');
Ergebnis:
FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_EXTRACT“