2014-05-09 77 views
1

我是新來的PHP,這真的難倒我 - 我試圖解析這個JSON爲了得到match_id的值。試圖解析與PHP的JSON

{ 
    "result": { 
     "status": 1, 
     "num_results": 1, 
     "total_results": 500, 
     "results_remaining": 499, 
     "matches": [ 
      { 
       "match_id": 649218382, 
       "match_seq_num": 588750904, 
       "start_time": 1399560988, 
       "lobby_type": 0, 
       "players": [ 
        { 
         "account_id": 4294967295, 
         "player_slot": 0, 
         "hero_id": 69 
        } 
       ] 

      } 
     ] 

    } 
} 

到目前爲止,我有:

$matchhistoryjson = file_get_contents($apimatchhistoryurl); 
$decodedmatchhistory = json_decode($matchhistoryjson, true); 
$matchid = $decodedmatchhistory->{'match_id'}; 

但我敢肯定,這不是做所有正確的方式。我只需要這個JSON文件就是匹配ID。

+2

你爲什麼認爲這不是辦法? –

+1

你的json無效。 ''''''''''''''''# – Brewal

+0

因爲當'echo $ matchid'時我得不到任何東西。 –

回答

2

你得到一個數組回來從json_decode()爲您的true值傳遞的第二個參數,所以你訪問它像任何多維 數組:

$matchhistoryjson = file_get_contents($apimatchhistoryurl); 
$decodedmatchhistory = json_decode($matchhistoryjson, true); 
echo $decodedmatchhistory['result']['matches'][0]['match_id']; 

Demo

當然,如果你有多個比賽你想獲得比賽ID,你可以循環通過$decodedmatchhistory['result']['matches']並得到他們相應的。

+0

JSON字符串中還有一個逗號,所以在這種情況下'json_decode()'將返回NULL。 (編輯:閱讀[OP的評論在這裏](http://stackoverflow.com/questions/23568834/trying-to-parse-json-with-php#comment36167328_23568834),它看起來像一個錯字,所以沒關係):) –

+0

意識到我自己,因爲我設置演示。只要它只是一個錯字,我覺得確定發佈這個答案。 –

+0

這就是它的歡呼聲 - 我實際上將它限制爲一個匹配結果(最近的)。但如果我將來需要更多的結果,我會牢記循環。謝謝!將標記爲答案儘快 –

0

這是你的代碼:

$matchhistoryjson = file_get_contents($apimatchhistoryurl); 
$decodedmatchhistory = json_decode($matchhistoryjson, true); 
$matchid = $decodedmatchhistory->{'match_id'}; 

兩個問題。首先,當你在通話設置truejson_decode()返回結果爲數組:

When TRUE, returned objects will be converted into associative arrays. 

所以,你就可以訪問數據作爲一個這樣的數組:

$matchid = $decodedmatchhistory['match_id']; 

但是你原來的語法不正確即使你是訪問數據對象:

$matchid = $decodedmatchhistory->{'match_id'}; 

如果設置json_decode()false甚至留下了PA rameter出完全,你可以這樣做,而不是:

$decodedmatchhistory = json_decode($matchhistoryjson); 
$matchid = $decodedmatchhistory->match_id; 

因此,嘗試既出&看看會發生什麼。