0

我正在通过 JSON 和 PHP 从 URL 检索数据。我很难将对象分开并显示数据。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 循环,例如:

$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

At the outset, make sure you turn error reporting on so you can see what exactly is failing.

An improper format passed to json_decode will just return false. It is one of the limitations of PHP's json handling that they are trying to address in the next release by creating a JSONSerializable interface. Make sure the return for decode is an instance of stdClass (or an array if you have passed the option for an associative array), otherwise the loops will never execute at all.

于 2012-04-30T19:38:56.357 回答