# JSON

JSON Antworten sind die Antworten der Wahl wenn mit AJAX Anfragen gearbeitet wird die Dataset Antworten erwarten; JSON kann sofort auf Seite des Clienten geparst werden, was zu schneller Ausführung führt.

Der JSON Action Helfer macht verschiedene Dinge:

- Layouts auschalten wenn sie aktuell aktiviert sind.

- Optional ein Array von Optionen als zweites Argument an `Zend_Json::encode()` übergeben. Dieses Array von Optionen erlaubt es Layouts und Kodierungen einzuschalten indem `Zend_Json_Expr` verwendet wird.

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

- Den ViewRenderer ausschalten wenn er aktiviert ist.

- Den 'Content-Type' Antwort Header auf '`application/json`' setzen.

- Standardmäßig, die Antwort sofort zurückgeben, ohne darauf zu warten das die Aktion die Ausführung beendet.

Die Verwendung ist einfach: Entweder als Methode des Helfer Brokers aufrufen, oder eine der Methoden `encodeJson()` oder `sendJson()` aufrufen:

    class FooController extends Zend_Controller_Action
    {
        public function barAction()
        {
            // einige Berechnungen durchführen...
            // Die JSON Antwort senden:
            $this->_helper->json($data);

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

            // oder das JSON empfangen:
            $json = $this->_helper->json->encodeJson($data);
        }
    }

## Layouts behalten

Wenn man ein separates Layout für JSON Antworten hat -- möglicherweise um die JSON Antworten in einer Art Kontext zu wrappen -- akzeptiert jede Methode im JSON Helfer ein zweites, optionales Argument: Ein Flag um Layouts zu aktivieren oder deaktivieren. Die Übergabe eines boolschen `TRUE` Wertes hält Layouts aktiviert:

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

Optional kann ein Array als zweiter Parameter übergeben werden. Dieses Array kann eine Vielzahl von Optionen enthalten, inklusive der keepLayouts Option:

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

## Kodierung einschalten durch Verwendung von Zend_Json_Expr

`Zend_Json::encode()` erlaubt die Kodierung von nativen JSON Ausdrücken indem `Zend_Json_Expr` Objekte verwendet werden. Diese Option ist standardmäßig ausgeschaltet. Um diese Option einzuschalten muß ein boolscher `TRUE` Wert an die enableJsonExprFinder Option übergeben werden:

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

Wenn man das durchführen will, muss man ein Array als zweite Option übergeben. Das erlaubt es auch andere Optionen, wie zum Beispiel die keepLayouts Option, zu kombinieren. Alle diese Optionen werden dann an `Zend_Json::encode()` übergeben.

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