如何修复我的代码以打印jSON语法?

时间:2014-03-07 21:16:07

标签: php json

我正在尝试获取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语法,我也无法让它工作。我做错了什么?

1 个答案:

答案 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包装器。