# 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`. По умолчанию эта возможность отключена. Для того, чтоб ее включить, нужно передать параметр enableJsonExprFinder со значением `TRUE`:

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

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

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