SQL Academy
Premium
Funktionsreferenz

JSON_EXTRACT

Extrahiert einen Wert aus einem JSON-Dokument anhand eines Pfads.

MySQL 8.1
JSON_EXTRACT(json_doc, path[, ...])

Parameter

json_docJSON
JSON-Dokument oder String mit JSON
pathVARCHAR
Pfad zum Wert: $ ist das ganze Dokument, $.key ein Schlüssel, $[0] ein Array-Element

Rückgabewert

JSON-Wert; NULL, wenn der Pfad im Dokument fehlt oder ein Argument NULL ist; bei mehreren Pfaden ein Array der gefundenen Werte

Beispiele

Element eines verschachtelten Arrays und fehlender Schlüssel

MySQL 8.1
SELECT JSON_EXTRACT('{"a": {"b": [10, 20]}}', '$.a.b[1]') AS second_item,
	JSON_EXTRACT('{"a": 1}', '$.x') AS missing_key;
second_itemmissing_key
20<NULL>

Promocode aus den Metadaten eines Ereignisses

MySQL 8.1
SELECT event_id,
	JSON_EXTRACT(metadata, '$.promo_code') AS promo_json,
	metadata->>'$.promo_code' AS promo
FROM events
WHERE JSON_EXTRACT(metadata, '$.promo_code') IS NOT NULL
LIMIT 5;
event_idpromo_jsonpromo
1"SUMMER20"SUMMER20
3"NEWYEAR"NEWYEAR
5"SUMMER20"SUMMER20
6"WELCOME10"WELCOME10
8"WELCOME10"WELCOME10

JSON null und SQL NULL

MySQL 8.1
SELECT event_id,
	metadata,
	JSON_EXTRACT(metadata, '$.error_msg') IS NULL AS is_sql_null,
	metadata->>'$.error_msg' AS error_msg
FROM events
WHERE event_id IN (1, 2);
event_idmetadatais_sql_nullerror_msg
1{"utm_source": "tiktok", "promo_code": "SUMMER20"}1<NULL>
2{"utm_src": "email", "error_msg": null}0null

Details

Das Ergebnis ist ein JSON-Wert: Strings behalten ihre Anführungszeichen, "SUMMER20". Die Kurzform für eine Spalte ist column->'$.key', und column->>'$.key' entfernt zusätzlich die Anführungszeichen, wie JSON_UNQUOTE. Diese Operatoren funktionieren nur mit einer Spalte, nicht mit einem Literal.

Ein fehlender Schlüssel ergibt NULL, ein Schlüssel mit dem Wert null dagegen JSON null, das nicht gleich SQL NULL ist: IS NULL ist dafür falsch, und ->> gibt den String null zurück. Ein String mit ungültigem JSON führt zu einem Fehler. In PostgreSQL verwendest du dafür die Operatoren -> und ->> mit dem Typ jsonb, und der Pfad wird anders geschrieben.

Siehe auch