我是JSON的新手,但我想弄清楚,但我得到一个简单的打印输出错误。
我想打印出分数作为一个简单的开始。我一直在阅读JSON,我不知道我做错了什么。
错误信息:
PHP警告:第11行/testing.php中为foreach()提供的参数无效
<?php
$string = file_get_contents('URL');
$json = json_decode($string);
foreach ($json['pos'] as $score)
{
echo "pos:". $score['score'] ."'n";
};
print_r($json);
?>
{
"pos": [
{
"pos": "1",
"name": "Sarah",
"game": "a",
"score": "-10",
"examscore": "-5"
},
{
"pos": "T2",
"name": "Brian ",
"game": "F*",
"score": "-8",
"examscore": "-3"
},
{
"pos": "T2",
"name": "Joe",
"game": "F*",
"score": "-8",
"examscore": "-1"
},
{
"pos": "WD"
}
]
}
你的foreach循环应该是:
foreach ($json->pos as $score) {
echo "pos: " .$score->score ."'n";
};
让我们先理解JSON。如果你把它打印成print_r($string);
,你会得到:
stdClass Object
(
[pos] => Array
(
[0] => stdClass Object
(
[pos] => 1
[name] => Sarah
[game] => a
[score] => -10
[examscore] => -5
)
[1] => stdClass Object
(
[pos] => T2
[name] => Brian
[game] => F*
[score] => -8
[examscore] => -3
)
[2] => stdClass Object
(
[pos] => T2
[name] => Joe
[game] => F*
[score] => -8
[examscore] => -1
)
[3] => stdClass Object
(
[pos] => WD
)
)
)
重要的是要注意,默认情况下json_decode(string)
返回一个OBJECT在上面的例子中,$json
是一个对象,[pos]
是一个数组。当您访问Object的成员时,您可以使用以下格式:$object->member
即使[pos]
是一个数组,它仍然是对象$json
的成员
如果您查看上面的JSON打印,您可以看到[pos]
实际上是一个对象数组!$object->member
公式适用于访问它的每个成员(姓名、游戏、分数等)。
默认情况下,如果不指定第二个参数为"true", json_decode返回的不是数组而是StdClass对象。http://php.net/manual/en/function.json-decode.php
如果你想使用json_decode结果作为数组
替换这个
$json = json_decode($string);
By this
$json = json_decode($string, true);
编辑:在你的foreach中,你试图显示$score['score'],但你在json中的最后一项不包含关键"score"。
代替echo "pos:". $score['score'] ."'n";
By this
if(isset($score['score'])) { echo "pos:". $score['score'] ."'n"; }