努力通过PHP理解JSON解析

时间:2014-11-25 00:02:23

标签: php json

不确定我在这里做错了什么,但我有我的Json字符串,我试图在IF语句中打印出值 即: 63,52,55

这是我的代码:

$jayjay = '{"items":{"cID":"63","qty":"2"},"items":{"cID":"52","qty":"1"},"items":{"cID":"55","qty":"1"}}';
echo $jayjay;
$obj = json_decode($jayjay, TRUE);
for($i=0; $i<=count($obj['items']); $i++) {

     echo $obj['items'][$i]['cID'];
     echo ",";
}    

但输出只是空白而我无法弄清楚为什么

任何帮助都将不胜感激。

谢谢

3 个答案:

答案 0 :(得分:2)

问题是你有钥匙&#34;物品&#34;多次在你的JSON中出错了。请注意,对于结构良好的JSON,JSON密钥必须是唯一的。

如果您使用多个具有相同名称的键,基本上没有错误,但在JSON中,具有相同名称的最后一个键是将要使用的键。在您的情况下,关键&#34;项目&#34;最好包含一个对象数组,因为它的值:

{'items' : [{"cID":"63","qty":"2"}, {"cID":"52","qty":"1"}, {"..." : "..."}]}

答案 1 :(得分:2)

正如哈米什在他的comment中所说,你不能拥有你提供的json。密钥(在这种情况下为items)将相互覆盖,直到最后一个密钥。 我建议如果您创建这样的数组:

{"items":[{"cID":"63","qty":"2"}, {"cID":"52","qty":"1"},.....]}

允许您根据需要进行修改。 意思是你可以根据需要简单地循环:

$items = json_decode($json, true);
foreach($items as $thing){
    echo $thing['cID'];
    echo ",";
}

答案 2 :(得分:0)

正如已经指出的那样,您的JSON数据格式不正确。

但是由于Stack Overflow是一种相当低效的语法检查数据的方法,我建议将来在静态JSON数据上使用JSON linter(例如this one)。或者至少,在解析之后检查json_last_error的返回值,以便至少在测试或调试时查找潜在的问题。