PHP无法解析JSON

3

我的json是

{"productInfoList":[{"prod":"Some Products","price":"someprice"},{"prod":"Another Product","price":"48"}]}

我的php代码是

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,  'http://example.com/file.json');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$voo = curl_exec($ch);
curl_close($ch);
$yf= json_decode($voo,true); 
for ($i=0; $i < 5; $i++)
{
$fkname = $yf->{'productInfoList'}[$i]->{'prod'};
echo $i;

echo $fkname;
}
?>

输出结果是012345。如何使用json获取产品名称?我已经通过http://jsonviewer.stack.hu/检查了json文件,一切都很好。

3个回答

2

使用 json_decode 后,JSON 就被转换成了 PHP 数组。尝试替换这行代码:

$fkname = $yf->{'productInfoList'}[$i]->{'prod'};

使用这行代码:
$fkname = $yf['productInfoList'][$i]['prod'];  

这里有一个工作中的演示

代码改进
在你的循环中,使用数组大小而不是硬编码的长度:

for ($i=0; $i < sizeOf($yf['productInfoList']); $i++)
{
$fkname = $yf['productInfoList'][$i]['prod'];

    echo $fkname."<BR />";
}

如果我去掉 true 呢? - IdidntKnewIt
好的,你比Gonzalon更快,所以你赢得了勾号,两个都点了赞。 - IdidntKnewIt
@IdidntKnewIt,请查看演示以改进您的代码。 - Luthando Ntsekwa
@IdidntKnewIt 对不起,我的演示中有一个打字错误,请再次检查。 - Luthando Ntsekwa
@IdidntKnewIt 在我提供的演示中,浏览器正在删除我的 i++,请在运行之前编辑它。 - Luthando Ntsekwa

2

就像这样可以工作:

$yf= json_decode($voo,true); 

$arr = $yf['productInfoList'];

for ($i=0; $i < sizeof($arr); $i++)
{
$fkname = $arr[$i]['prod'];
echo $i;

echo $fkname;
}

考虑使用 sizeof 函数来迭代数组。
输出如下:

0某些产品1另一种产品


1
使用foreach很简单。
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,  'http://example.com/file.json');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$voo = curl_exec($ch);
curl_close($ch);
$yf= json_decode($voo,true); 

$i = 0;
foreach($yf['productInfoList'] as $product)
{    
    echo $i.' - '.$product['prod'].'<br />';
    $i++;
}
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接