# JSON

Les réponses JSON sont les réponses de choix dans une architecture de type AJAX qui attend des données structurées. JSON peut être immédiatement interprété du coté du client, ce qui rend la tâche plus simple et plus rapide.

L'aide d'action JSON effectue plusieurs traitements :

- Désactive les layouts si elles sont activées.

- Optionnellement, un tableau d'options en second argument de `Zend_Json::encode()`. Ce tableau d'options permet l'activation des layouts et l'encodage en utilisant `Zend_Json_Expr`.

      $this->_helper->json($data, array('enableJsonExprFinder' => true));

- Désactive le ViewRenderer s'il est activé.

- Envoie à la réponse un en-tête 'Content-Type' à `application/json`.

- Par défaut, retourne immédiatement la réponse, sans attendre la fin de l'exécution de l'action.

Son utilisation est toute simple, appelez le depuis le gestionnaire d'aides (Broker), ou appelez une de ses méthodes `encodeJson()` ou `sendJson()` :

    class FooController extends Zend_Controller_Action
    {
        public function barAction()
        {
            // Effectue des traitements ici ...
            // Envoie la réponse JSON :
            $this->_helper->json($data);

            // ou...
            $this->_helper->json->sendJson($data);

            // ou retourne la chaine json:
            $json = $this->_helper->json->encodeJson($data);
        }
    }

## Conserver les Layouts

Si vous avez besoin des layouts séparés pour les réponses JSON, pour par exemple générer vos réponses JSON dans un contexte particulier, chaque méthode de l'aide JSON accepte un second paramètre booléen. A `TRUE`, les layouts resteront activées :

    $this->_helper->json($data, true);

Optionnellement, vous pouvez fournir un tableau en tant que second paramètre. Ce tableau peut conftenir une variété d'options, incluant l'option keepLayouts :

    $this->_helper->json($data, array('keepLayouts' => true);

## Activer l'encodage en utilisant Zend_Json_Expr

`Zend_Json::encode()` permet l'encodage des expressions JSON natives en utilisant des objets `Zend_Json_Expr`. Cette option est désactivée par défaut. Pour l'activer, fournissez la valeur booléenne `TRUE` à l'option enableJsonExprFinder :

    $this->_helper->json($data, array('enableJsonExprFinder' => true);

Si vous souhaitez faire ceci, vous devez un tableau en tant que second argument. Ceci vous permet aussi de combiner avec les autres options, comme l'option keepLayouts. Toutes ces options sont alors fournies à `Zend_Json::encode()`.

    $this->_helper->json($data, array(
        'enableJsonExprFinder' => true,
        'keepLayouts'          => true,
    ));