0

URLからJSONとPHPを介してデータを取得しています。オブジェクトを分解してデータを表示するのに問題があります。PHPコードは、forループに到達するまで機能しているようです。

$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" }
            } } 
4

3 に答える 3

1

まず、スクリプトが実際のJSON文字列を返しますか?json_encodeしましたか?

JSONの前とデコード後のオブジェクトの「データ構造」を比較しましたか?違いはありましたか?おそらく、foreachループとJSONに関するものではなく、問題は、複数のサブオブジェクトで構成されているように見える、ある種のデータ構造にあります。

別の方法は、json_decode($ json、true)を返し、それを配列として扱うことにより、そのコンテキストでオブジェクトの代わりに連想配列を使用しようとすることです。

于 2012-04-30T19:29:43.557 に答える
1

配置したデータ構造に応じて、必要なforeachループは次のように1つだけです。

$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ループでは、値(コード内の$ monitoring、名前を変更したばかりの私の場合の$ Status)は、ループオーバーする必要のある別の配列ではありません。これには、EmailedとStatusをキーとして持つstdオブジェクトが含まれます。

于 2012-04-30T19:48:07.327 に答える
0

最初に、エラーレポートをオンにして、何が失敗しているのかを正確に確認できるようにしてください。

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

于 2012-04-30T19:38:56.357 に答える