Start · Sprachen · PHP · Referenz · json_validate

json_validate

Funktion

Prüft, ob ein String gültiges JSON enthält, ohne die Daten tatsächlich zu dekodieren.

seit PHP 8.3.0 Kategorie: json

Signatur

json_validate(string $json, int $depth = 512, int $flags = 0): bool

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

Typ
bool
Beschreibung
Gibt 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;
}
bool(true) bool(false) Ungültiges JSON: Syntax error

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']);
Aktion: update

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
bool(false) bool(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.