# JSON

Las respuestas JSON se están convirtiendo en la respuesta de elección cuando se trata de requerimientos AJAX que esperan recibir respuestas datasets; en el lado del cliente, JSON puede ser inmediatamente parseado y ejecutado rápidamente.

El ayudante de acción de JSON hace varias cosas:

- Deshabilita los layouts si estuvieran habilitados.

- Opcionalmente, un array de opciones que pasar como segundo argumento a `Zend_Json::encode()`. Este array de opciones permite habilitar layouts y codificación utilizando `Zend_Json_Expr`.

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

- Desactiva la ViewRenderer si está actualmente habilitada.

- Establece la cabecera de respuesta 'Content-Type' a 'application/json'.

- Por defecto, devuelve inmediatamente la respuesta, sin esperar a la acción para finalizar la ejecución.

El uso es simple: o bien llamarlo como un método del ayudante, o llamar a uno de los métodos `encodeJson()` o `sendJson()`:

    class FooController extends Zend_Controller_Action
    {
        public function barAction()
        {
            // hacer algún procesamiento...
            // Enviar la respuesta JSON:
            $this->_helper->json($data);

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

            // o recuperar json:
            $json = $this->_helper->json->encodeJson($data);
        }
    }

## Conservando los Esquemas(Layouts)

Si se tiene un esquema separado para respuestas de JSON -- quizás para envolver la respuesta de JSON en algún tipo de contexto -- cada método en el ayudante JSON acepta un segundo argumento opcional: un flag para activar o desactivar layouts. Pasando un valor booleano `true` conservará los layouts habilitados:

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

Opcionalmente, puede pasar un array como el segundo parámetro. Este array puede contener una variedad de opciones, incluida la opción `keepLayouts`:

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

## Habilitando la Codificación usando Zend_Json_Expr

`Zend_Json::encode()` permite la codificación de expresiones nativas de JSON utilizando objetos `Zend_Json_Expr`. Esta opción está desactivada por defecto. Para activar esta opción, pase un valor booleano `true` a la opción `enableJsonExprFinder`:

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

Si desea hacer esto, debe pasar un array como segundo argumento. Esto también le permite combinar otras opciones, como la opción `keepLayouts`. Todas esas opciones se pasan luego a `Zend_Json::encode()`.

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