2012-04-30 18 views
0

我正在通過URL從JSON和PHP檢索數據。 我很難分開對象並顯示數據。 PHP代碼似乎正在工作,直到我到達for循環。JSON數據和PHP

$jsonurl = 'http://myweb/api.php'; 
$json = file_get_contents($jsonurl); 
$json_output = json_decode($json); 
foreach ($json_output->Monitoring AS $monitoring) { 
    foreach ($monitoring->Status AS $Status){ 
     echo $Status->Emailed; 
     echo $Status->Status; 
    } 

這裏是我的數據結構:

object(stdClass)#12 (1) 
     { ["Monitoring"]=> array(10) { [0]=> object(stdClass)#13 (14) 
      { 
      ["Status"]=> string(30) "HTTP/1.1 302 Moved Temporarily" 
      ["Emailed"]=> string(1) "0" } 
      [1]=> object(stdClass)#14 (14) { 
      ["Status"]=> string(30) "HTTP/1.1 302 Moved Temporarily" 
      ["Emailed"]=> string(1) "0" } 
      [2]=> object(stdClass)#15 (14) { 
      ["Status"]=> string(30) "HTTP/1.1 302 Moved Temporarily" 
      ["Emailed"]=> string(1) "0" } 
      [3]=> object(stdClass)#16 (14) { 
      ["Status"]=> string(30) "HTTP/1.1 302 Moved Temporarily"    
      ["Emailed"]=> string(1) "0" } 
      } } 
+0

那麼,這段代碼有什麼問題?它可以工作嗎? – galymzhan

+0

它工作,直到我到達foreach循環。當我引用循環中的對象時,沒有數據顯示 –

回答

1

根據你把數據結構,你只需要一個foreach循環,如:

$jsonurl = 'http://myweb/api.php'; 
$json = file_get_contents($jsonurl); 
$json_output = json_decode($json); 
foreach ($json_output->Monitoring AS $Status) { 
    echo $Status->Emailed; 
    echo $Status->Status; 
} 
第一foreach循環

,在代碼中的值($監測,礦山$狀態就像我剛纔改名它)不是你需要循環的另一個數組。它將包含一個包含Emailed和Status作爲關鍵字的std對象。

1

首先,你確定你的腳本返回實際的JSON字符串?你json_encode嗎?

您比較了JSON之前和解碼之後的對象的'數據結構'嗎?有沒有區別?也許它不是關於foreach循環和JSON,而是問題在於你的數據結構中的排序,它似乎由多個子對象組成。

另一種方法是通過返回json_decode($ json,true)並將其視爲數組來處理該上下文中的對象,而不是使用關聯數組。

0

首先,確保您打開錯誤報告,以便您可以查看究竟發生了什麼故障。

傳遞給json_decode的格式不正確只會返回false。通過創建JSONSerializable接口,他們試圖在下一版本中解決這個問題是PHP json處理的限制之一。確保解碼返回是stdClass的一個實例(如果您已經傳遞了關聯數組的選項,則返回一個數組),否則循環永遠不會執行。