JSON_EXTRACT
Extrahiert einen Wert aus einem JSON-Dokument anhand eines Pfads.
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
SELECT JSON_EXTRACT('{"a": {"b": [10, 20]}}', '$.a.b[1]') AS second_item,
JSON_EXTRACT('{"a": 1}', '$.x') AS missing_key;Promocode aus den Metadaten eines Ereignisses
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;JSON null und SQL NULL
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);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.