REST API以JSON格式的响应

时间:2013-10-22 07:39:30

标签: php json magento rest

在magento中我们使用rest url来访问数据,因为http://localhost/magento/api/rest/products它以xml格式返回,而不是我需要JSON。

我试过下面的代码,但没有用

$this->getResponse()->setHeader('Content-type', 'application/json');
$this->getResponse()->setBody($jsonData);

在文件夹\ magento \ app \ code \ core \ Mage \ Api \ Controller \ Action.php

2 个答案:

答案 0 :(得分:4)

vinox,您应该覆盖默认文件Request.php。将\ app \ code \ core \ Mage \ Api2 \ Model \ Request.php复制到本地目录,并在getAcceptTypes()方法结束之前添加以下代码。

unset($orderedTypes);
$orderedTypes=Array("application/json" => 1);

以其他方式,您的getAcceptTypes()方法应该如下所示。

public function getAcceptTypes(){
$qualityToTypes = array();
$orderedTypes   = array();

foreach (preg_split('/,\s*/', $this->getHeader('Accept')) as $definition) {
    $typeWithQ = explode(';', $definition);
    $mimeType  = trim(array_shift($typeWithQ));

    // check MIME type validity
    if (!preg_match('~^([0-9a-z*+\-]+)(?:/([0-9a-z*+\-\.]+))?$~i', $mimeType)) {
        continue;
    }
    $quality = '1.0'; // default value for quality

    if ($typeWithQ) {
        $qAndValue = explode('=', $typeWithQ[0]);

        if (2 == count($qAndValue)) {
            $quality = $qAndValue[1];
        }
    }
    $qualityToTypes[$quality][$mimeType] = true;
}
krsort($qualityToTypes);

foreach ($qualityToTypes as $typeList) {
    $orderedTypes += $typeList;
}
unset($orderedTypes);
$orderedTypes=Array("application/json" => 1);
return array_keys($orderedTypes);
}

答案 1 :(得分:1)

我猜你的$ jsonData实际上并不是JSON。尝试使用json助手

$jsonData = Mage::helper('core')->jsonEncode($data)