2014-03-05 70 views
0

我有一個json文件,我正在閱讀url的內容。我只想解析一個特定的對象/段,單獨存儲並顯示它。PHP json_decode解析特定對象/段

.Json 
    { 
    "playerstats": { 
     "id": "adwawdawdawdawd", 
     "game": "123324234", 
     "stats": [ 
      { 
       "name": "tk", 
       "value": 57656 
      }, 
      { 
       "name": "td", 
       "value": 38439 
      }, 
      { 
       "name": "ttp", 
       "value": 2659434 
      }, 
      { 
       "name": "tpb", 
       "value": 847 
      }, 
      ] 
     "achievements": [ 
      { 
       "name": "wbp", 
       "achieved": 1 
      }, 
      { 
       "name": "bpl", 
       "achieved": 1 
      }, 
      { 
       "name": "bdl", 
       "achieved": 1 
      }, 
      { 
       "name": "kel", 
       "achieved": 1 
      } 
] 
} 
} 

所以我想要一個單獨的「Stats」數組和一個單獨的「Achievements」數組。

然後我可以循環,並得到這樣

Stats: name, value 
     name, value 
     name, value 
     ... 

Achievements: name, achieved 
       name, achieved 
       name, achieved 
       ... 

的輸出。

.PHP Attempt 

    $url = "insertjsonUrlHere"; 
    $jsonFile = file_get_contents($url); 
    $obj = json_decode($jsonFile, true); 
    $stats = $obj->playerstats->stats; 
    $achievements = $obj->playerstats->achievements; 

    foreach ($stats as $key => $value) { 
    echo $key." ".$value."<br />"; 
    } 
    foreach ($achievements as $key => $value) { 
     echo $key." ".$value."<br />"; 
    } 

回答

1

您的JSON格式不正確。測試你的JSON Here(它顯示格式錯誤的行)。
如果JSON文件格式不正確,則json_decode將返回NULL

糾正你的JSON後,這個PHP代碼工作intended-

$url = "insertjsonUrlHere"; 
$jsonFile = file_get_contents($url); 
$obj = json_decode($jsonFile, true); 
$stats = $obj['playerstats']['stats']; 
$achievements = $obj['playerstats']['achievements']; 
foreach ($stats as $v) { 
    echo $v['name']." ".$v['value']."<br />"; 
} 
foreach ($achievements as $v) { 
    echo $v['name']." ".$v['achieved']."<br />"; 
} 
/* 
    OUTPUT 
*/ 
    tk 57656 
    td 38439 
    ttp 2659434 
    tpb 847 
    wbp 1 
    bpl 1 
    bdl 1 
    kel 1 

編輯:
如果你想通過名稱來訪問$stat的值,這個功能應該與工作

function get_stats_value($stats, $name){ 
    foreach ($stats as $v) { 
     if($v['name'] == $name){ 
      return $v['value']; 
     } 
    } 
    return false; 
} 
$val = get_stats_value($stats, "tk"); 
var_dump($val); 
//OUTPUT -> int 57656 
+0

好的答案,我有另一個快速的給你。如果我想獲得一個特定的stats-> name(例如「tk」)並返回它的值(例如「57656」),那麼我可以爲每一個創建getFunctions我將如何執行此操作? – KHAN

+0

@KHAN檢查編輯。 – Kamehameha

0

你正在使用帶有'true'標誌的json_decode,這意味着你得到一個數組而不是一個對象。因此,要訪問您的值,請將您的代碼更改爲以下內容:

$stats = $obj['playerstats']['stats']; 
$achievements = $obj['playerstats']['achievements‘]; 
0

看看是否能正常工作。你也可以用array_walk做一個版本。

$stats = array(); 
foreach($obj->playerstats->stats as$a){ 
    $stats[$a['name']] = $a['value']; 
} 
$achievements = array(); 
foreach($obj->playerstats->achievements as $a){ 
    $achievements[$a['name']] = $a['achieved']; 
}