Php 如何修复代码以打印jSON语法?
我正在尝试获取一个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
<?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...}
]});