Start · Sprachen · PHP · Referenz · SimdJsonException

SimdJsonException

Klasse

Ausnahme-Klasse der <code>simdjson</code>-Erweiterung, die bei Fehlern während des JSON-Parsens ausgelöst wird.

seit PHP 7.4.0 Kategorie: error

Signatur

class SimdJsonException extends RuntimeException

Beschreibung

SimdJsonException ist die zentrale Fehlerklasse der PHP-Erweiterung simdjson, die auf der gleichnamigen C++-Bibliothek basiert und SIMD-Prozessorinstruktionen für besonders schnelles JSON-Parsing nutzt. Tritt ein Fehler beim Parsen oder Auswerten von JSON auf, wirft die Erweiterung eine Instanz dieser Klasse.

Als direkte Unterklasse von RuntimeException kann SimdJsonException wie jede andere PHP-Ausnahme mit einem try/catch-Block abgefangen werden. Da sie von RuntimeException erbt, kann alternativ auch catch (RuntimeException $e) verwendet werden, um Fehler generisch zu behandeln.

Typische Auslöser sind ungültiges JSON (z. B. fehlende Anführungszeichen, unerlaubte Zeichen), ein zu tief verschachteltes Dokument (überschrittene Tiefenlimit-Grenze) oder ein ungültiger JSON-Pointer. Über die geerbten Methoden getMessage() und getCode() lassen sich detaillierte Informationen zum aufgetretenen Fehler abrufen.

Sinnvoll ist der Einsatz von SimdJsonException immer dann, wenn JSON-Eingaben aus externen Quellen (APIs, Dateien, Nutzereingaben) verarbeitet werden und dabei höchste Verarbeitungsgeschwindigkeit gefragt ist, ohne auf robuste Fehlerbehandlung zu verzichten.

Beispiele

Ungültiges JSON abfangen

<?php
try {
    $result = simdjson_decode('{ungültiges json}', true);
} catch (SimdJsonException $e) {
    echo 'JSON-Fehler: ' . $e->getMessage() . PHP_EOL;
    echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
}
JSON-Fehler: The JSON document has an improper structure: missing or superfluous commas, braces, missing keys, etc. Fehlercode: 1

Zu tief verschachteltes JSON abfangen

<?php
// Standardmäßige maximale Tiefe ist 512
$deepJson = str_repeat('{"a":', 600) . '1' . str_repeat('}', 600);

try {
    $result = simdjson_decode($deepJson, true);
} catch (SimdJsonException $e) {
    echo 'Tiefenlimit überschritten: ' . $e->getMessage() . PHP_EOL;
}
Tiefenlimit überschritten: The JSON document was too deep (too many nested objects and arrays).

JSON-Pointer mit Fehlerbehandlung

<?php
$json = '{"name":"Alice","age":30}';

try {
    // Ungültiger Pointer – Schlüssel existiert nicht
    $value = simdjson_key_value($json, '/nonexistent');
} catch (SimdJsonException $e) {
    echo 'Pointer-Fehler: ' . $e->getMessage() . PHP_EOL;
}
Pointer-Fehler: The JSON pointer did not match any elements in the JSON document.

// Wichtig · Fallstricke

Versionshinweis: Die simdjson-Erweiterung ist keine Standard-PHP-Extension und muss separat über PECL installiert werden (pecl install simdjson). Die Verfügbarkeit von SimdJsonException hängt daher von der installierten Version der Erweiterung ab.

Abgrenzung zu json_decode(): Die native PHP-Funktion json_decode() wirft bei fehlerhaftem JSON keine Ausnahme, sondern gibt null zurück und setzt einen Fehlercode. Die simdjson-Erweiterung hingegen wirft stets eine SimdJsonException, was eine sauberere Fehlerbehandlung ohne manuelle json_last_error()-Prüfungen ermöglicht.

Tipp: Für eine allgemeine Fehlerbehandlung, die unabhängig von der verwendeten JSON-Bibliothek ist, empfiehlt es sich, sowohl SimdJsonException als auch JsonException abzufangen oder den gemeinsamen Elterntyp RuntimeException zu verwenden.