Nette Documentation Preview

syntax
Fonctions JSON
**************

.[perex]
[api: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 :

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

Tous les exemples supposent que l'alias de classe suivant est défini :

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


Utilisation .[#toc-usage]
=========================


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

Convertit `$value` au format JSON.

Lorsque `$pretty` est défini, il formate JSON pour une lecture plus facile et une plus grande clarté :

```php
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`:

```php
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 :

```php
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 :

```php
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.

```php
try {
	$json = Json::encode($value);
} catch (Nette\Utils\JsonException $e) {
	// Gestion des exceptions
}
```


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

Analyse JSON en PHP.

Le paramètre `$forceArray` force le retour des tableaux au lieu des objets :

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

Il lance une exception `Nette\Utils\JsonException` en cas d'erreur.

```php
try {
	$value = Json::decode($json);
} catch (Nette\Utils\JsonException $e) {
	// Gestion des exceptions
}
```


Comment envoyer un JSON à partir d'un présentateur ? .[#toc-how-to-send-a-json-from-a-presenter]
================================================================================================

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 |application:presenters#Sending a Response].

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}', forceArray: 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.