# 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,
    ));