<commit_before><?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 16016 -->
<sect3 id="zend.controller.actionhelpers.json">
    <title>JSON</title>

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

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

    <itemizedlist>
        <listitem><para>
                レイアウト機能が有効になっている場合はそれを無効にする。
        </para></listitem>

        <listitem>
            <para>
                任意で、オプションの配列を
                <methodname>Zend_Json::encode()</methodname> の 2 番目の引数として渡す。
                このオプションの配列で、レイアウト機能を有効にしたり
                <classname>Zend_Json_Expr</classname> によるエンコードを有効にしたりする。
            </para>

            <programlisting language="php"><![CDATA[
$this->_helper->json($data, array('enableJsonExprFinder' => true));
]]></programlisting>
        </listitem>

        <listitem><para>
                ViewRenderer が有効になっている場合にそれを無効にする。
        </para></listitem>

        <listitem><para>
                'Content-Type' レスポンスヘッダを '<filename>application/json</filename>' に設定する。
        </para></listitem>

        <listitem><para>
                デフォルトでレスポンスをすぐに返す。
                アクションの実行が終了するのを待たない。
        </para></listitem>
    </itemizedlist>

    <para>
        使い方は簡単です。ヘルパーブローカのメソッドとしてコールするか、
        <methodname>encodeJson()</methodname> あるいは
        <methodname>sendJson()</methodname> といったメソッドをコールするだけです。
    </para>

    <programlisting language="php"><![CDATA[
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);
    }
}
]]></programlisting>

    <note>
        <title>レイアウトの維持</title>

        <para>
            <acronym>JSON</acronym> レスポンスでレイアウト機能を使用したい場合
            (いくつかの <acronym>JSON</acronym> レスポンスをひとつにまとめて処理するなど)
            のために、<acronym>JSON</acronym> ヘルパーの各メソッドには
            2 番目の引数が用意されています。
            この引数はオプションのフラグで、レイアウト機能を有効あるいは無効にします。
            <constant>TRUE</constant> を渡すと、レイアウト機能を有効なままにします。
        </para>

        <programlisting language="php"><![CDATA[
$this->_helper->json($data, true);
]]></programlisting>

        <para>
            オプションで、2 番目の引数に配列を渡すことができます。
            この配列には、<code>keepLayouts</code>
            のオプションを含むさまざまなオプションを指定することができます。
        </para>

        <programlisting language="php"><![CDATA[
$this->_helper->json($data, array('keepLayouts' => true);
]]></programlisting>
    </note>

    <note>
        <title>Zend_Json_Expr を使用したエンコードの有効化</title>

        <para>
            <methodname>Zend_Json::encode()</methodname> は、ネイティブ <acronym>JSON</acronym> 式を
            <classname>Zend_Json_Expr</classname> オブジェクトを使用してエンコードすることができます。
            このオプションはデフォルトでは無効になっています。
            有効にするには、<code>enableJsonExprFinder</code>
            オプションに <constant>TRUE</constant> を設定します。
        </para>

        <programlisting language="php"><![CDATA[
$this->_helper->json($data, array('enableJsonExprFinder' => true);
]]></programlisting>

        <para>
            これを行いたい場合は、2 番目の引数に必ず配列を渡さなければなりません。
            また、たとえば <code>keepLayouts</code> のような他のオプションと組み合わせることもできます。
            これらすべてのオプションが <methodname>Zend_Json::encode()</methodname> に渡されます。<commit_msg>sync Japanese document with r16503.<commit_after><?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 16503 -->
<sect3 id="zend.controller.actionhelpers.json">
    <title>JSON</title>

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

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

    <itemizedlist>
        <listitem><para>
                レイアウト機能が有効になっている場合はそれを無効にする。
        </para></listitem>

        <listitem>
            <para>
                任意で、オプションの配列を
                <methodname>Zend_Json::encode()</methodname> の 2 番目の引数として渡す。
                このオプションの配列で、レイアウト機能を有効にしたり
                <classname>Zend_Json_Expr</classname> によるエンコードを有効にしたりする。
            </para>

            <programlisting language="php"><![CDATA[
$this->_helper->json($data, array('enableJsonExprFinder' => true));
]]></programlisting>
        </listitem>

        <listitem><para>
                ViewRenderer が有効になっている場合にそれを無効にする。
        </para></listitem>

        <listitem><para>
                'Content-Type' レスポンスヘッダを '<filename>application/json</filename>' に設定する。
        </para></listitem>

        <listitem><para>
                デフォルトでレスポンスをすぐに返す。
                アクションの実行が終了するのを待たない。
        </para></listitem>
    </itemizedlist>

    <para>
        使い方は簡単です。ヘルパーブローカのメソッドとしてコールするか、
        <methodname>encodeJson()</methodname> あるいは
        <methodname>sendJson()</methodname> といったメソッドをコールするだけです。
    </para>

    <programlisting language="php"><![CDATA[
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);
    }
}
]]></programlisting>

    <note>
        <title>レイアウトの維持</title>

        <para>
            <acronym>JSON</acronym> レスポンスでレイアウト機能を使用したい場合
            (いくつかの <acronym>JSON</acronym> レスポンスをひとつにまとめて処理するなど)
            のために、<acronym>JSON</acronym> ヘルパーの各メソッドには
            2 番目の引数が用意されています。
            この引数はオプションのフラグで、レイアウト機能を有効あるいは無効にします。
            <constant>TRUE</constant> を渡すと、レイアウト機能を有効なままにします。
        </para>

        <programlisting language="php"><![CDATA[
$this->_helper->json($data, true);
]]></programlisting>

        <para>
            オプションで、2 番目の引数に配列を渡すことができます。
            この配列には、<emphasis>keepLayouts</emphasis>
            のオプションを含むさまざまなオプションを指定することができます。
        </para>

        <programlisting language="php"><![CDATA[
$this->_helper->json($data, array('keepLayouts' => true);
]]></programlisting>
    </note>

    <note>
        <title>Zend_Json_Expr を使用したエンコードの有効化</title>

        <para>
            <methodname>Zend_Json::encode()</methodname> は、ネイティブ <acronym>JSON</acronym> 式を
            <classname>Zend_Json_Expr</classname> オブジェクトを使用してエンコードすることができます。
            このオプションはデフォルトでは無効になっています。
            有効にするには、<emphasis>enableJsonExprFinder</emphasis>
            オプションに <constant>TRUE</constant> を設定します。
        </para>

        <programlisting language="php"><![CDATA[
$this->_helper->json($data, array('enableJsonExprFinder' => true);
]]></programlisting>

        <para>
            これを行いたい場合は、2 番目の引数に必ず配列を渡さなければなりません。
            また、たとえば <emphasis>keepLayouts</emphasis> のような他のオプションと組み合わせることもできます。
            これらすべてのオプションが <methodname>Zend_Json::encode()</methodname> に渡されます。
{'fraction_non_alphanumeric': 0.13886572143452877, 'fraction_numerical': 0.004309146510981373, 'mean_word_length': 2.5269607843137254, 'pattern_counts': {'":': 0, '<': 213, '<?xml version=': 2, '>': 251, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 2}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6348400', 'n_tokens_mistral': 3356, 'n_tokens_neox': 3098, 'n_words': 307}