json_validate
json_validate($json, $hloubka, $priznaky)
Ověří, že řetězec je platný JSON, a vrátí true nebo false. Data přitom nesestavuje, proto u velkých dokumentů šetří paměť. Funkce je od PHP 8.3.
Parametry
- $json – ověřovaný řetězec.
- $hloubka – nepovinný, nejvyšší povolené vnoření. Výchozí 512.
- $priznaky – nepovinný, jediný povolený je JSON_INVALID_UTF8_IGNORE.
Příklady
var_dump(json_validate('{"jmeno": "Jana", "vek": 30}')); // bool(true)
var_dump(json_validate('{"jmeno": "Jana",}')); // bool(false)
var_dump(json_validate("")); // bool(false)
var_dump(json_validate("null")); // bool(true)
// důvod chyby
json_validate("{jmeno: 1}");
echo json_last_error_msg(); // Syntax error
// hloubka vnoření
var_dump(json_validate("[[[1]]]", 2)); // bool(false)
echo json_last_error_msg(); // Maximum stack depth exceeded
Náhrada pro starší PHP
Ve verzích starších než PHP 8.3 funkce není. Následující kód ji doplní jen tam, kde chybí, v novějších verzích se použije vestavěná funkce.
if (!function_exists("json_validate")) {
function json_validate($json, $hloubka = 512) {
json_decode($json, false, $hloubka);
return json_last_error() === JSON_ERROR_NONE;
}
}
var_dump(json_validate('{"jmeno": "Jana"}')); // bool(true)
var_dump(json_validate("null")); // bool(true)
var_dump(json_validate("")); // bool(false)
Na co si dát pozor
- Když data stejně potřebujete, json_validate() nevolejte. Rovnou použijte json_decode() a zkontrolujte chybu, jinak se JSON zpracuje dvakrát.
- "null" je platný JSON. Kontrola výsledku json_decode() === null ho od chyby neodliší, json_validate() ano.
- Jiný příznak než JSON_INVALID_UTF8_IGNORE vyhodí ValueError.
- Náhrada pro starší PHP data sestaví, paměť tedy neušetří.
Příbuzné funkce:
json_decode()
json_last_error()
json_last_error_msg()
json_encode()