2014-11-25 108 views
1

不知道我在做什么错在这里,但我有我的JSON字符串,我试图让值IF语句
即打印出来: 63,52,55努力通过PHP了解JSON解析

这里是我的代码:

$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 ","; 
}  

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

任何帮助,将不胜感激。

谢谢

+0

通常情况下,这是因为JSON数据中的语法错误。检查'json_last_error'的结果。它可能正在返回'JSON_ERROR_SYNTAX' – 2014-11-25 00:04:12

+7

这似乎不是有效的JSON。这是一个带有重复'items'键的对象,所以我期望输出没有被很好地定义。我认为你期待'items'键的值是一个数组,但事实并非如此。无论如何它都会抛出错误 - 例如http://codepad.viper-7.com/KIFqba *和*没有你的问题的'IF'语句。所以....修复所有这些东西,然后回来:) – Hamish 2014-11-25 00:05:04

+0

用'foreach($ obj ['items'] as&$ item){echo $ item ['cID'],',';}替换循环;} '它应该输出'55,'。 – 2014-11-25 00:06:57

回答

2

的问题是,你有关键的“项目”,在你的JSON多时间,这是错误的。请注意,JSON密钥对于格式良好的JSON必须是唯一的。

如果您使用多个具有相同名称的密钥,基本上不会出现错误,但在JSON中,具有相同名称的最后一个密钥是将要使用的密钥。在你的情况下,关键的“项目”将是更好的包含对象的数组,因为它的价值:

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

谢谢,你的JSON格式非常完美,现在我看到了我的错误。 – 2014-11-25 00:16:54

+0

欢迎您:) – Goran 2014-11-26 07:59:52

2

正如麦高在他的comment说,你不能有JSON作为你提供。密钥(在这种情况下为items)将相互覆盖,直到最后一个密钥。

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

允许你itterate根据您的需要: 如果你创建了一个这样的数组我的建议是。 这意味着你可以简单的循环,你需要:

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

您的JSON仍然无效。你打开'['两次,但只关闭一次。 – 2014-11-25 00:33:15

+0

@IsmaelMiguel很棒的地方!愚蠢的错字早在一早。修复。 – Darren 2014-11-25 00:33:57

+0

不要担心老兄,让我们假装我们没有看到它,并没有发生。每个人都会犯错误。 – 2014-11-25 00:36:35

0

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

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