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.

version: 4.0