努力通过PHP了解JSON解析
不知道我在做什么错在这里,但我有我的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 ",";
}
但输出的只是空白,我无法弄清楚,为什么
任何帮助,将不胜感激。
谢谢
的问题是,你有关键的“项目”,在你的JSON多时间,这是错误的。请注意,JSON密钥对于格式良好的JSON必须是唯一的。
如果您使用多个具有相同名称的密钥,基本上不会出现错误,但在JSON中,具有相同名称的最后一个密钥是将要使用的密钥。在你的情况下,关键的“项目”将是更好的包含对象的数组,因为它的价值:
{'items' : [{"cID":"63","qty":"2"}, {"cID":"52","qty":"1"}, {"..." : "..."}]}
谢谢,你的JSON格式非常完美,现在我看到了我的错误。 – 2014-11-25 00:16:54
欢迎您:) – Goran 2014-11-26 07:59:52
正如麦高在他的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 ",";
}
您的JSON仍然无效。你打开'['两次,但只关闭一次。 – 2014-11-25 00:33:15
@IsmaelMiguel很棒的地方!愚蠢的错字早在一早。修复。 – Darren 2014-11-25 00:33:57
不要担心老兄,让我们假装我们没有看到它,并没有发生。每个人都会犯错误。 – 2014-11-25 00:36:35
正如已经指出的那样,你的JSON数据格式不正确。
但是由于Stack Overflow是一种相当低效的语法检查数据的方法,因此我建议将来在静态JSON数据上使用JSON linter(如this one)。或者至少在分析后检查返回值json_last_error
以至少在测试或调试时查找潜在问题。
通常情况下,这是因为JSON数据中的语法错误。检查'json_last_error'的结果。它可能正在返回'JSON_ERROR_SYNTAX' – 2014-11-25 00:04:12
这似乎不是有效的JSON。这是一个带有重复'items'键的对象,所以我期望输出没有被很好地定义。我认为你期待'items'键的值是一个数组,但事实并非如此。无论如何它都会抛出错误 - 例如http://codepad.viper-7.com/KIFqba *和*没有你的问题的'IF'语句。所以....修复所有这些东西,然后回来:) – Hamish 2014-11-25 00:05:04
用'foreach($ obj ['items'] as&$ item){echo $ item ['cID'],',';}替换循环;} '它应该输出'55,'。 – 2014-11-25 00:06:57