PHP json_encode未返回有效的json


PHP json_encode not returning valid json

我正在用PHP v5.2.17运行一个Debian box。我正试图用XML文件绕过跨域问题,并使用它来获取任何XML并返回json:

<?php
header('content-type: application/json; charset=utf-8');
if( strlen($_GET["feed"]) >= 13 ) {
  $xml = file_get_contents(urldecode($_GET["feed"]));
  if($xml) {
    $data = @simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOCDATA);
    $json = json_encode($data);
    echo isset($_GET["callback"]) ? "{$_GET[’callback’]}($json)" : $json;
  }
}
?>

问题是,它没有向jquery返回有效的json。。起始字符是"(",结束字符是")",jquery希望"["作为起始字符,"]"作为结束字符。我已经获取了输出,并使用了几个在线验证工具来检查它。

有没有一种方法可以在发送回或传递json_encode选项之前更改这些字符?

如果json_encode($data)需要一个数组(如您所说),您可以将json_encore($data

$json = json_encode(array($data));

EDIT:另外,我认为SimpleXml调用将导致一堆SimpleXmlElement,也许json_encode认为它应该是对象,而不是数组?也许对数组进行强制转换会得到正确的结果。

您不能json_encode() SimpleXMLElements(这是simplexml_load_string()返回的类型。您必须将XML文件中的数据转换为某种本地PHP类型(很可能是数组)

抱歉这是错误的。json_encode()实际上可以编码SimpleXMLElements(至少在我的PHP版本5.3.4上)。因此,如果您的客户端代码需要一个数组,则必须将$data封装在一个数组中:

$json = json_encode(array($data));

我们很可能在数组上使用json_encode()函数。因此,您首先将XML内容放入PHP数组,然后应用json_encode()。我认为这将解决您的问题。。

看起来您正在发送一个空的回调参数或其他什么,但jQuery中的回调参数必须看起来完全像这样:callback=?