Index: library/Zend/Controller/Action/Helper/Json.php =================================================================== --- library/Zend/Controller/Action/Helper/Json.php (revision 24415) +++ library/Zend/Controller/Action/Helper/Json.php (working copy) @@ -53,6 +53,7 @@ * @param mixed $data * @param boolean $keepLayouts * @param boolean|array $keepLayouts + * @param boolean $dataIsJson Provided data is already JSON * NOTE: if boolean, establish $keepLayouts to true|false * if array, admit params for Zend_Json::encode as enableJsonExprFinder=>true|false * if $keepLayouts and parmas for Zend_Json::encode are required @@ -62,15 +63,17 @@ * @throws Zend_Controller_Action_Helper_Json * @return string */ - public function encodeJson($data, $keepLayouts = false) + public function encodeJson($data, $keepLayouts = false, $dataIsJson = false) { - /** - * @see Zend_View_Helper_Json - */ - require_once 'Zend/View/Helper/Json.php'; - $jsonHelper = new Zend_View_Helper_Json(); - $data = $jsonHelper->json($data, $keepLayouts); - + if (!$dataIsJson) { + /** + * @see Zend_View_Helper_Json + */ + require_once 'Zend/View/Helper/Json.php'; + $jsonHelper = new Zend_View_Helper_Json(); + $data = $jsonHelper->json($data, $keepLayouts); + } + if (!$keepLayouts) { /** * @see Zend_Controller_Action_HelperBroker @@ -87,6 +90,7 @@ * * @param mixed $data * @param boolean|array $keepLayouts + * @param boolean $dataIsJson Provided data is already JSON * NOTE: if boolean, establish $keepLayouts to true|false * if array, admit params for Zend_Json::encode as enableJsonExprFinder=>true|false * if $keepLayouts and parmas for Zend_Json::encode are required @@ -95,9 +99,11 @@ * to Zend_View_Helper_Json * @return string|void */ - public function sendJson($data, $keepLayouts = false) + public function sendJson($data, $keepLayouts = false, $dataIsJson = false) { - $data = $this->encodeJson($data, $keepLayouts); + if (!$dataIsJson) { + $data = $this->encodeJson($data, $keepLayouts, false); + } $response = $this->getResponse(); $response->setBody($data); @@ -118,9 +124,10 @@ * @param mixed $data * @param boolean $sendNow * @param boolean $keepLayouts + * @param boolean $dataIsJson Provided data is already JSON * @return string|void */ - public function direct($data, $sendNow = true, $keepLayouts = false) + public function direct($data, $sendNow = true, $keepLayouts = false, $dataIsJson = false) { if ($sendNow) { return $this->sendJson($data, $keepLayouts);