我正在尝试获取jSON外观相似页面的内容并打印所有值,如下面的代码所示。
更新代码
<?php
$json = file_get_contents('http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getTrims&year=2007&make=mini');
$vres = array('?({"Trims":' , '});');
$allakse = array("" , "");
$json = str_replace($vres, $allakse, $json);
echo $json;
$cars = json_decode($json, true);
foreach ($cars[0] as $value)
{
echo $value, "<br>";
}
这就是文件的样子。
?({
Trims: [
{
"model_id":"15155"
,"model_make_id":"ford"
,"model_name":"Taurus"
,"model_trim":""
,"model_year":"2000"
,...(all available model fields are included)
},
{
"model_id":"15073"
,"model_make_id":"ford"
,"model_name":"Taurus"
,"model_trim":"3.0"
,"model_year":"2000"
,...(all available model fields are included)
},
{etc...}
]});
即使我替换了一些字符使其在开头和结尾看起来像一个jSON语法,我也无法让它工作。我做错了什么?
答案 0 :(得分:1)
响应是JSON-P,而不是JSON。
JSON-P由函数调用(在URL中指定的函数名称(在本例中为?
))和通过第一个参数传递的数据组成。
在JSON-P中,该数据应该是JSON。在这种情况下,它不是。它是一个JavaScript对象文字,不符合与JSON规范匹配的子集。 (具体来说,您将属性名称表示为标识符而不是字符串文字)。
您可以使用JSON validator来识别JSON响应中的错误并尝试清理它们(可能使用一些不正常的正则表达式)。
或者,您可以查看运行JavaScript引擎(例如Node.js或Rhino),定义将第一个参数传递给JSON.stringify()
的函数,然后打印结果(然后将其捕获回到PHP变量)。
更新:
我查看了您提供的网址。输出与问题中的数据不匹配。 JSON似乎确实有效,没有您的代码显示的问题。
停止要求callback=?
获取JSON而不是JSON-P。然后你不需要剥离JSON-P包装器。