# JSON

JSON レスポンスは、AJAX リクエストでデータセットを受け取るときの 形式としてすっかり定着しました。JSON はクライアント側で すぐにパースすることができ、すばやく実行できます。

JSON アクションヘッダは次のようなことを行います。

- レイアウト機能が有効になっている場合はそれを無効にする。

- 任意で、オプションの配列を `Zend_Json::encode()` の 2 番目の引数として渡す。 このオプションの配列で、レイアウト機能を有効にしたり `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 ヘルパーの各メソッドには 2 番目の引数が用意されています。 この引数はオプションのフラグで、レイアウト機能を有効あるいは無効にします。 `TRUE` を渡すと、レイアウト機能を有効なままにします。

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

オプションで、2 番目の引数に配列を渡すことができます。 この配列には、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);

これを行いたい場合は、2 番目の引数に必ず配列を渡さなければなりません。 また、たとえば keepLayouts のような他のオプションと組み合わせることもできます。 これらすべてのオプションが `Zend_Json::encode()` に渡されます。

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