如何打印单个JSON元素


How to print a single JSON element

我是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"; }