PHP Conference Nagoya 2025

json_validate

(PHP 8 >= 8.3.0)

json_validateVérifie si une chaîne contient du JSON valide

Description

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

Renvoie si la chaîne de caractères donnée est du JSON syntaxiquement valide. Si json_validate() renvoie true, json_decode() décodera avec succès la chaîne donnée en utilisant les mêmes depth et flags.

Si json_validate() renvoie false, la cause peut être récupérée en utilisant json_last_error() et json_last_error_msg().

json_validate() utilise moins de mémoire que json_decode() si le contenu JSON décodé n'est pas utilisé, car il n'a pas besoin de construire la structure de tableau ou d'objet contenant le contenu.

Attention

Appeler json_validate() immédiatement avant json_decode() analysera inutilement la chaîne deux fois, car json_decode() effectue implicitement une validation lors du décodage.

json_validate() ne doit donc être utilisé que si le décodage du contenu JSON n'est pas immédiatement utilisé et que savoir si la chaîne contient du JSON valide est nécessaire.

Liste de paramètres

json

La chaîne à valider.

Cette fonction ne fonctionne qu'avec des chaînes encodées en UTF-8.

Note:

PHP implémente un sur-ensemble de JSON tel que spécifié dans la » RFC 7159 originale.

depth

Le niveau de profondeur maximum de la structure à décoder. La valeur doit être supérieure à 0, et inférieure ou égale à 2147483647.

flags

Aujourd'hui, seul JSON_INVALID_UTF8_IGNORE est accepté.

Valeurs de retour

Renvoie true si la chaîne donnée est du JSON syntaxiquement valide, sinon renvoie false.

Erreurs / Exceptions

Si depth est en dehors de la plage autorisée, une ValueError est lancée.

Si flags n'est pas un drapeau valide, une ValueError est lancée.

Exemples

Exemple #1 Exemples de json_validate()

<?php
var_dump
(json_validate('{ "test": { "foo": "bar" } }'));
var_dump(json_validate('{ "": "": "" } }'));
?>

L'exemple ci-dessus va afficher :

bool(true)
bool(false)

Voir aussi

add a note

User Contributed Notes 2 notes

up
20
Behrad
10 months ago
---------------- PHP < 8.3 ----------------

function json_validate(string $string): bool {
json_decode($string);

return json_last_error() === JSON_ERROR_NONE;
}

var_dump(json_validate('{ "test": { "foo": "bar" } }')); // true

---------------- PHP >= 8.3 ----------------

var_dump(json_validate('{ "test": { "foo": "bar" } }')); // true

Note: code from https://www.php.net/releases/8.3/en.php
up
10
Julien T.
9 months ago
Building upon Allan R.'s initial idea, I've developed an improved version of the json_validate function for those using PHP 8.2 and earlier versions. This function emulates the functionality introduced in PHP 8.3, providing an effective way to validate JSON strings in earlier PHP versions.

```php
if (!function_exists('json_validate')) {
/**
* Validates a JSON string.
*
* @param string $json The JSON string to validate.
* @param int $depth Maximum depth. Must be greater than zero.
* @param int $flags Bitmask of JSON decode options.
* @return bool Returns true if the string is a valid JSON, otherwise false.
*/
function json_validate($json, $depth = 512, $flags = 0) {
if (!is_string($json)) {
return false;
}

try {
json_decode($json, false, $depth, $flags | JSON_THROW_ON_ERROR);
return true;
} catch (\JsonException $e) {
return false;
}
}
}
```

Key Improvements:

- String Check: Added a validation to ensure the input is a string.
- Error Handling: Utilizes try-catch to effectively catch and handle JsonException.
- Backward Compatibility: Safely integrable in older PHP versions, automatically deferring to native functionality in PHP 8.3+.
To Top