# JSON

JSON быстро становится предпочтительным форматом для использования с AJAX-запросами, которые подразумевают ответы с данными. Синтаксический разбор JSON может производиться сразу на стороне клиента, что приводит к большей производительности.

Помощник действий JSON выполняет несколько функций:

- Отключает макеты, если они включены.

- Опционально в качестве второго аргумента можно передавать массив опций для `Zend_Json::encode()`. Этот масив опций позволяет включать макеты и кодирование с использованием `Zend_Json_Expr`.

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

- Отключает ViewRenderer, если он включен.

- Устанавливает заголовок ответа 'Content-Type' со значением 'application/json'.

- По умолчанию сразу возвращает ответ, не дожидаясь завершения выполнения действия.

Использование помощника довольно простое - вызывайте его как метод брокера помощников или вызывайте один из его методов `encodeJson()` или `sendJson()`:

    class FooController extends Zend_Controller_Action
    {
        public function barAction()
        {
            // произведение некоторых действий...

            // Отправка ответа JSON:
            $this->_helper->json($data);

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

            // либо получение данных в формате json:
            $json = $this->_helper->json->encodeJson($data);
        }
    }

## Использование макетов

Если вы имеете отдельный макет для ответов JSON (возможно, для того, чтобы включить ответ JSON в некоторый контекст), то на этот случай все методы в помощнике JSON принимает второй, опциональный аргумент - флаг для включения/отключения макетов. Передача булевого значения `TRUE` позволит оставить макеты включенными:

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

Вы можете также передавать массив через второй параметр. Этот массив может содержать набор опций, включая опцию `keepLayouts`:

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

## Включение кодирования через Zend_Json_Expr

`Zend_Json::encode()` позволяет закодировывать "родные" выражения JSON с использованием объектов `Zend_Json_Expr`. Эта опция по умолчанию отключена. Для того, чтобы включить эту опцию, передавайте булево значение `TRUE` через опцию `enableJsonExprFinder`:

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

При использовании этой опции вы должны передавать массив в качестве второго параметра. Это также позволяет комбинировать опции друг с другом - например, с опцией `keepLayouts`. Все эти опции потом передаются `Zend_Json::encode()`.

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