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

Php 如何修复代码以打印jSON语法?,php,json,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

我正在尝试获取一个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>";
}

即使我在开头和结尾替换了一些字符,使其看起来像jSON语法,我也无法让它工作。我做错了什么?

响应是中断的JSON-p,而不是JSON

JSON-p包含一个函数调用(对URL中指定的函数名(
,在本例中))以及通过第一个参数传递的数据

在JSON-p中,该数据应该是JSON。在这种情况下,情况并非如此。它是一个JavaScript对象文本,不符合与JSON规范匹配的子集(具体来说,您将属性名表示为标识符,而不是字符串文本)

您可以使用一个函数来识别JSON响应中的错误,并尝试清除它们(可能使用一些不神圣的正则表达式集)

或者,您可以查看运行JavaScript引擎(如Node.js或Rhino),定义一个函数,将第一个参数传递给
JSON.stringify()
,然后打印结果(然后将其捕获回PHP变量)


更新:

我已经看过你提供的网址了。输出与问题中的数据不匹配。JSON看起来确实有效,并且没有代码显示的问题


只需停止请求
callback=?
来获取JSON而不是JSON-p。这样您就不需要剥掉JSON-p包装器。

您可以发布运行脚本后获得的输出吗?\不要尝试手动创建JSON。创建一个数组,然后使用echo json_encode($yourData)@RocketHazmat-OP似乎试图解析第三方损坏的JSON-P,而不是生成他们自己的JSON。如果已经回答了,潜在的回答者应该在回答之前回答。如果我从属性中删除
,只保留
的值怎么办
?@Karoumpas-问题是属性中缺少
”!确实,我明白了。我已经更新了我的代码,使其成为有效的jSON,并设法回显了值:)但有一个问题,它只回显了第一个
{……}的值
并且不会继续发送给其他人。@Karoumpas:因为您正在
$cars[0]
上循环。只需从
http://www.carqueryapi.com/api/0.3/?cmd=getTrims&year=2007&make=mini
,使用
$cars=json\u decode($json,true);
,按原样解码;,然后对每个($cars['Trims']按$car)执行
@Karoumpas:
$car
将是一个数组,因此您需要获取它的属性(或循环)。它适用于我:
?({
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...}
]});