Fonctions JSON
Nette\Utils\Json est une classe statique avec des fonctions d'encodage et de décodage JSON. Elle gère les vulnérabilités des différentes versions de PHP et lève les exceptions en cas d'erreur.
Installation :
composer require nette/utils
Tous les exemples supposent que l'alias de classe suivant est défini :
use Nette\Utils\Json;
Utilisation
encode(mixed $value, bool $pretty=false, bool $asciiSafe=false, bool $htmlSafe=false, bool $forceObjects=false): string
Convertit $value
au format JSON.
Lorsque $pretty
est défini, il formate JSON pour une lecture plus facile et une plus grande clarté :
Json::encode($value); // renvoie du JSON
Json::encode($value, pretty: true); // renvoie un JSON plus clair
Lorsque $asciiSafe
est défini, il génère une sortie ASCII, c'est-à-dire qu'il remplace les caractères unicode
par des séquences \uxxxx
:
Json::encode('žluťoučký', asciiSafe: true);
// '"\u017elu\u0165ou\u010dk\u00fd"'
Le paramètre $htmlSafe
garantit que la sortie ne contient pas de caractères ayant une signification spéciale en
HTML :
Json::encode('one<two & three', htmlSafe: true);
// '"one\u003Ctwo \u0026 three"'
Avec $forceObjects
, même les tableaux avec des clés numériques seront encodés comme des objets
JavaScript :
Json::encode(['a', 'b', 'c']);
// '["a","b","c"]'
Json::encode(['a', 'b', 'c'], forceObjects: true);
// '{"0":"a","1":"b","2":"c"}'
Il lance une exception Nette\Utils\JsonException
en cas d'erreur.
try {
$json = Json::encode($value);
} catch (Nette\Utils\JsonException $e) {
// Gestion des exceptions
}
decode(string $json, bool $forceArray=false): mixed
Analyse JSON en PHP.
Le paramètre $forceArray
force le retour des tableaux au lieu des objets :
Json::decode('{"variable": true}'); // renvoie un objet de type stdClass
Json::decode('{"variable": true}', forceArrays: true); // renvoie un tableau
Il lance une exception Nette\Utils\JsonException
en cas d'erreur.
try {
$value = Json::decode($json);
} catch (Nette\Utils\JsonException $e) {
// Gestion des exceptions
}
Comment envoyer un JSON à partir d'un présentateur ?
Vous pouvez utiliser la méthode $this->sendJson($data)
, qui peut être appelée, par exemple, dans la méthode
action*()
, voir Envoi d'une
réponse.