Funcția json_validate() (introdusă în PHP 8.3) verifică dacă un șir de caractere reprezintă un document JSON valid din punct de vedere sintactic, fără a construi efectiv structura de date în memoria RAM.
Înainte de PHP 8.3, singura modalitate de a valida un payload JSON primit printr-un webhook sau API era apelarea json_decode($json) urmată de verificarea json_last_error() === JSON_ERROR_NONE. Pentru payload-uri mari de zeci de megabytes, acest proces aloca cantități masive de memorie RAM și consuma cicluri de procesor doar pentru a arunca obiectele la gunoi dacă se dorea doar validarea.
Validarea unui payload API mare cu json_validate()
<?php
declare(strict_types=1);
$corpCerereHttp = file_get_contents('php://input');
// 1. Verificare rapidă cu consum minim de resurse
if (!json_validate($corpCerereHttp)) {
http_response_code(400);
echo json_encode([
'eroare' => 'Payload-ul transmis conține o eroare de sintaxă JSON.',
'detaliu' => json_last_error_msg()
]);
exit;
}
// 2. Doar dacă JSON-ul este garantat valid, procedăm la decodare:
$date = json_decode($corpCerereHttp, true);
echo "Payload validat cu succes. Înregistrări: " . count($date);
Comparație de Performanță: json_validate vs json_decode
| Criteriu | json_validate() (PHP 8.3) | json_decode() (Metoda veche) |
|---|---|---|
| Consum Memorie RAM | Aproape 0 bytes: Verifică sintaxa prin streaming direct pe șir. | Masiv: Creează mii de obiecte stdClass sau array-uri în RAM. |
| Viteză de execuție | De 2 până la 4 ori mai rapidă decât decodarea completă. | Lentă pe documente adânc imbricate. |