2012-04-30 13 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

あなたが入れたデータ構造によれば、あなただけのような1つのforeachループを必要とする:私はちょうど名前を変更したとして$鉱山では、あなたのコード、$ステータスに監視(値、

最初の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; 
} 

それはループする必要がある別の配列ではありません)。これにはEmailedとStatusというキーを持つstdオブジェクトが含まれています。

1

まず、あなたのスクリプトは、実際のJSON文字列を返しますが、確かではありますか?あなたはそれをjson_encodeでしたか?

JSONの前とデコード後のオブジェクトの 'データ構造'を比較しましたか?相違はありましたか?たぶんforeachループやJSONについてのことではないかもしれません。問題は代わりに、複数のサブオブジェクトで構成されているようなソートのデータ構造にあります。

代わりに、json_decode($ json、true)を返して配列として扱うことで、そのコンテキストでオブジェクトの代わりに連想配列を試してみることもできます。

0

まず、エラー報告を有効にして、何が失敗しているかを確認してください。

不適切な形式をjson_decodeに渡すと、falseが返されます。 JSONSerializableインターフェイスを作成することによって、次のリリースで対処しようとしているPHPのjson処理の限界の1つです。デコードの戻り値がstdClassのインスタンス(または連想配列のオプションを渡した場合は配列)であることを確認してください。そうでないと、ループはまったく実行されません。