2015-07-10 137 views
0

我是JSON的新手,但我試圖弄清楚,但是我得到一個簡單打印輸出的錯誤。如何打印單個JSON元素

我想打印出分數作爲一個簡單的開始。我一直在閱讀關於JSON的內容,但我沒有看到我做錯了什麼。

錯誤消息:

PHP警告:在/testing.php爲的foreach()供給線11

<?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" 
    } 
] 
    } 

回答

0

默認情況下,返回json_decode你不是一個數組而是一個一個StdClass參數無效如果不指定第二個參數爲「true」,則返回對象。 http://php.net/manual/en/function.json-decode.php

所以,如果你想使用json_decode結果作爲數組

替換此

$json = json_decode($string); 

通過這個

$json = json_decode($string, true); 

編輯:

在你的foreach中,你嘗試顯示$ score ['score'],但是json中的最後一項不包含關鍵的「score」。

更換

echo "pos:". $score['score'] ."\n"; 

通過這個

if(isset($score['score'])) { echo "pos:". $score['score'] ."\n"; } 

希望它會幫助你。

+0

感謝,但同樣的錯誤 –

2

你的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->member

即使[pos]是一個數組,它仍然是對象的成員$json
如果你看一下上面的JSON打印出來,你可以看到[pos]實際上是一個對象數組! $object->member公式適用於訪問其每個成員(名稱,遊戲,樂譜等)。

希望這會有所幫助。

+0

更有意義的感謝,同樣的錯誤壽:/ - PHP的通知:試圖讓非對象的財產/testing.php在線12 PHP的警告:提供的foreach無效的參數()在第12行的/testing.php中 –

+0

爲什麼你說。$ score-> score?當$分數不是一個對象? –

+0

'$ score'是一個對象。如果你看上面,'pos'是一個由4個不同的對象組成的數組。在你的foreach循環中,你一次只訪問一個對象中的每一個。這些單獨的對象被稱爲'$ score',在foreach循環中指定。 – 2015-07-11 01:27:48