0

在 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

4

2 回答 2

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);
}
于 2013-10-22T08:03:31.190 回答
1

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

$jsonData = Mage::helper('core')->jsonEncode($data)
于 2013-10-22T08:04:15.820 回答