Signatur
Beschreibung
json_validate() analysiert einen String und gibt true zurück, wenn er syntaktisch korrektes JSON darstellt – andernfalls false. Im Gegensatz zu json_decode() werden die Daten dabei nicht in eine PHP-Struktur überführt, was die Funktion deutlich ressourcenschonender macht, wenn nur die Gültigkeit geprüft werden soll.
Typische Einsatzszenarien sind API-Endpunkte, die eingehende Request-Bodies validieren müssen, bevor sie weiterverarbeitet werden, oder Import-Pipelines, in denen JSON-Dateien auf Korrektheit geprüft werden sollen. Da kein Objekt/Array im Speicher erzeugt wird, spart die Funktion bei großen Payloads erheblich Speicher und Zeit.
Ist der String kein gültiges JSON, kann der genaue Fehlergrund anschließend über json_last_error() bzw. json_last_error_msg() abgefragt werden. Das optionale Flag JSON_INVALID_UTF8_IGNORE erlaubt es, ungültige UTF-8-Sequenzen stillschweigend zu ignorieren.
Zu beachten ist, dass auch eine isolierte JSON-Primitive (z. B. der String "hello" oder die Zahl 42) als gültiges JSON gilt – nicht nur Objekte und Arrays.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $json Pflicht | string | Der zu prüfende String. Er wird auf syntaktische JSON-Konformität untersucht. | |
| $depth | int | 512 | Maximale Verschachtelungstiefe der JSON-Struktur. Werte <= 0 führen zu einem ValueError. Stimmt mit dem Parameter in json_decode() überein. |
| $flags | int | 0 | Bitmaske aus JSON-Flags. Derzeit wird ausschließlich JSON_INVALID_UTF8_IGNORE unterstützt; alle anderen Flags lösen einen ValueError aus. |
Rückgabewert
true zurück, wenn der übergebene String gültiges JSON ist, andernfalls false. Bei ungültigen Parameterwerten (z. B. $depth <= 0 oder nicht unterstützte Flags) wird ein ValueError geworfen.Beispiele
Grundlegende Validierung eines JSON-Strings
<?php
$validJson = '{"name": "Anna", "age": 30}';
$invalidJson = '{name: Anna}';
var_dump(json_validate($validJson)); // true
var_dump(json_validate($invalidJson)); // false
if (!json_validate($invalidJson)) {
echo 'Ungültiges JSON: ' . json_last_error_msg() . PHP_EOL;
}
Validierung eines eingehenden API-Request-Body
<?php
// Simulierter Request-Body
$body = file_get_contents('php://input') ?: '{"action": "update", "id": 42}';
if (!json_validate($body, depth: 32)) {
http_response_code(400);
echo json_encode(['error' => 'Ungültiger JSON-Body: ' . json_last_error_msg()]);
exit;
}
// Nur wenn gültig, tatsächlich dekodieren
$data = json_decode($body, associative: true);
echo 'Aktion: ' . htmlspecialchars($data['action']);
Verwendung mit JSON_INVALID_UTF8_IGNORE
<?php
// String mit ungültiger UTF-8-Sequenz
$brokenUtf8 = '{"value": "caf\xe9"}';
var_dump(json_validate($brokenUtf8)); // false
var_dump(json_validate($brokenUtf8, flags: JSON_INVALID_UTF8_IGNORE)); // true
// Wichtig · Fallstricke
Verfügbarkeit: json_validate() existiert erst ab PHP 8.3.0. In älteren Projekten muss die Gültigkeit weiterhin über json_decode() mit anschließendem json_last_error()-Check erfolgen.
Kein Ersatz für vollständige Schemavalidierung: Die Funktion prüft ausschließlich die syntaktische JSON-Konformität, nicht ob der Inhalt einem bestimmten Schema oder Datentyp entspricht. Für Schemavalidierung empfiehlt sich eine dedizierte Bibliothek wie justinrainbow/json-schema.
Doppeltes Parsen vermeiden: Falls die Daten nach der Validierung ohnehin dekodiert werden sollen, ist es in vielen Fällen effizienter, direkt json_decode() aufzurufen und den Rückgabewert auf null sowie json_last_error() zu prüfen, um das JSON zweimal zu parsen zu vermeiden.