Signatur
Beschreibung
simdjson_decode() ist das PECL-Äquivalent zu json_decode(), nutzt jedoch intern die simdjson-Bibliothek, die SIMD-Prozessorinstruktionen (SSE4.2, AVX2 etc.) einsetzt, um JSON-Daten deutlich schneller zu verarbeiten als klassische Implementierungen. Gerade bei großen JSON-Payloads (ab einigen Kilobyte) zeigt sich ein deutlicher Geschwindigkeitsvorteil gegenüber der eingebauten json_decode()-Funktion.
Wird $associative auf true gesetzt, werden JSON-Objekte als assoziative PHP-Arrays zurückgegeben; andernfalls als Instanzen von stdClass. Das Verhalten entspricht damit dem von json_decode(), sodass ein nahtloser Austausch möglich ist.
Der Parameter $depth begrenzt die maximale Verschachtelungstiefe des zu parsenden JSON. Wird dieser Wert überschritten, schlägt das Parsen fehl. Dies dient als Schutz vor exzessiv tief verschachtelten Strukturen.
Die Funktion ist besonders empfehlenswert in Hochlast-Szenarien, etwa bei API-Servern, die viele oder große JSON-Dokumente verarbeiten. Sie setzt die PECL-Extension simdjson voraus und ist nicht im PHP-Kern enthalten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $json Pflicht | string | Der zu dekodierenden JSON-String. Muss UTF-8-kodiert sein. | |
| $associative | bool | false | Gibt an, ob JSON-Objekte als assoziative Arrays (true) oder als stdClass-Objekte (false) zurückgegeben werden sollen. |
| $depth | int | 512 | Maximale erlaubte Verschachtelungstiefe des JSON-Dokuments. Bei Überschreitung wird ein Fehler ausgelöst. |
Rückgabewert
stdClass-Objekt, ein Array, ein Skalar (string, int, float, bool) oder null sein. Bei einem Fehler wird eine SimdJsonException geworfen (ab simdjson 2.x) oder false zurückgegeben.Beispiele
Einfaches JSON-Objekt dekodieren
<?php
$json = '{"name": "Alice", "age": 30, "admin": true}';
// Als stdClass-Objekt
$obj = simdjson_decode($json);
echo $obj->name; // Alice
echo $obj->age; // 30
// Als assoziatives Array
$arr = simdjson_decode($json, true);
echo $arr['name']; // Alice
Große JSON-Payload performant verarbeiten
<?php
// Simuliertes großes JSON-Array (z. B. aus einer API-Antwort)
$json = file_get_contents('/var/data/produkte.json');
$start = microtime(true);
$produkte = simdjson_decode($json, true);
$dauer = microtime(true) - $start;
echo sprintf(
'%d Produkte in %.4f Sekunden geladen.\n',
count($produkte),
$dauer
);
Fehlerbehandlung bei ungültigem JSON
<?php
$ungueltig = '{name: Alice}';
try {
$ergebnis = simdjson_decode($ungueltig, true);
} catch (\SimdJsonException $e) {
echo 'JSON-Fehler: ' . $e->getMessage() . "\n";
}
// Wichtig · Fallstricke
Voraussetzungen: Die Funktion ist nicht im PHP-Kern enthalten, sondern erfordert die Installation der PECL-Extension simdjson (pecl install simdjson). Außerdem benötigt der Prozessor SIMD-Unterstützung (SSE4.2 oder AVX2); auf sehr alten oder eingeschränkten Systemen (z. B. manchen virtuellen Maschinen) kann die Extension den Fallback-Modus nutzen oder gar nicht kompilierbar sein.
Fehlerbehandlung: Anders als json_decode(), das bei Fehlern stillschweigend null zurückgibt und auf json_last_error() setzt, wirft simdjson_decode() bei ungültigem JSON eine SimdJsonException. Der Code muss entsprechend mit try/catch abgesichert werden.
Kompatibilität: Die API orientiert sich bewusst an json_decode(); ein Austausch ist in den meisten Fällen möglich. Der Parameter $flags (z. B. JSON_BIGINT_AS_STRING) existiert in dieser Funktion jedoch nicht, was ein wichtiger Unterschied ist.
Sicherheit: Wie bei json_decode() sollte die $depth bei nicht vertrauenswürdigen Eingaben bewusst niedrig gesetzt werden, um Denial-of-Service durch übermäßige Rekursion zu verhindern.