Nette Documentation Preview

syntax
Travailler avec JSON
********************

.[perex]
[api:Nette\Utils\Json] est une classe statique avec des fonctions pour l'encodage et le décodage du format JSON. Elle gère les vulnérabilités des différentes versions de PHP et lance des exceptions en cas d'erreurs.


Installation :

```shell
composer require nette/utils
```

Tous les exemples supposent qu'un alias a été créé :

```php
use Nette\Utils\Json;
```


Utilisation
===========


encode(mixed $value, bool $pretty=false, bool $asciiSafe=false, bool $htmlSafe=false, bool $forceObjects=false): string .[method]
---------------------------------------------------------------------------------------------------------------------------------

Convertit `$value` au format JSON.

Mettre `$pretty` à `true` formate le JSON pour une meilleure lisibilité et plus de clarté :

```php
Json::encode($value); // retourne JSON
Json::encode($value, pretty: true); // retourne un JSON plus lisible
```

Avec `$asciiSafe` à `true`, elle produit une sortie ASCII, c'est-à-dire que les caractères Unicode sont remplacés par des séquences `\uxxxx` :

```php
Json::encode('žluťoučký', asciiSafe: true);
// '"\u017elu\u0165ou\u010dk\u00fd"'
```

Le paramètre `$htmlSafe` assure que la sortie ne contiendra pas de caractères ayant une signification spéciale en HTML :

```php
Json::encode('one<two & three', htmlSafe: true);
// '"one\u003Ctwo \u0026 three"'
```

Avec `$forceObjects` à `true`, même les tableaux à clés numériques seront encodés comme des objets JavaScript :

```php
Json::encode(['a', 'b', 'c']);
// '["a","b","c"]'
Json::encode(['a', 'b', 'c'], forceObjects: true);
// '{"0":"a","1":"b","2":"c"}'
```

En cas d'erreur, lance une exception `Nette\Utils\JsonException`.

```php
try {
	$json = Json::encode($value);
} catch (Nette\Utils\JsonException $e) {
	// Gestion de l'exception
}
```


decode(string $json, bool $forceArray=false): mixed .[method]
-------------------------------------------------------------

Analyse le JSON en PHP.

Mettre `$forceArrays` à `true` force le retour de tableaux au lieu d'objets :

```php
Json::decode('{"variable": true}'); // retourne un objet de type stdClass
Json::decode('{"variable": true}', forceArrays: true); // retourne un tableau
```

En cas d'erreur, lance une exception `Nette\Utils\JsonException`.

```php
try {
	$value = Json::decode($json);
} catch (Nette\Utils\JsonException $e) {
	// Gestion de l'exception
}
```


Comment envoyer du JSON depuis un presenter ?
=============================================

Vous pouvez utiliser la méthode `$this->sendJson($data)`, appelable par exemple dans une méthode `action*()`. Voyez [Envoi d'une réponse |application:presenters#Envoi de la réponse].

Travailler avec JSON

Nette\Utils\Json est une classe statique avec des fonctions pour l'encodage et le décodage du format JSON. Elle gère les vulnérabilités des différentes versions de PHP et lance des exceptions en cas d'erreurs.

Installation :

composer require nette/utils

Tous les exemples supposent qu'un alias a été créé :

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.

Mettre $pretty à true formate le JSON pour une meilleure lisibilité et plus de clarté :

Json::encode($value); // retourne JSON
Json::encode($value, pretty: true); // retourne un JSON plus lisible

Avec $asciiSafe à true, elle produit une sortie ASCII, c'est-à-dire que les caractères Unicode sont remplacés par des séquences \uxxxx :

Json::encode('žluťoučký', asciiSafe: true);
// '"\u017elu\u0165ou\u010dk\u00fd"'

Le paramètre $htmlSafe assure que la sortie ne contiendra pas de caractères ayant une signification spéciale en HTML :

Json::encode('one<two & three', htmlSafe: true);
// '"one\u003Ctwo \u0026 three"'

Avec $forceObjects à true, même les tableaux à 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"}'

En cas d'erreur, lance une exception Nette\Utils\JsonException.

try {
	$json = Json::encode($value);
} catch (Nette\Utils\JsonException $e) {
	// Gestion de l'exception
}

decode(string $json, bool $forceArray=false)mixed

Analyse le JSON en PHP.

Mettre $forceArrays à true force le retour de tableaux au lieu d'objets :

Json::decode('{"variable": true}'); // retourne un objet de type stdClass
Json::decode('{"variable": true}', forceArrays: true); // retourne un tableau

En cas d'erreur, lance une exception Nette\Utils\JsonException.

try {
	$value = Json::decode($json);
} catch (Nette\Utils\JsonException $e) {
	// Gestion de l'exception
}

Comment envoyer du JSON depuis un presenter ?

Vous pouvez utiliser la méthode $this->sendJson($data), appelable par exemple dans une méthode action*(). Voyez Envoi d'une réponse.