JSON data and PHP


JSON data and PHP

我正在通过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" }
            } } 

根据您输入的数据结构,您只需要一个 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在我的代码中,因为我刚刚重命名了它)不是您需要循环的另一个数组。它将包含一个 std 对象,其中电子邮件和状态作为键。

首先,你确定你的脚本返回实际的JSON字符串吗?你json_encode了吗?

您是否在 JSON 之前和解码后比较了对象的"数据结构"?有什么区别吗?也许这根本不是关于foreach循环和JSON,问题出在您的各种数据结构中,它似乎由多个子对象组成。

另一种方法是尝试在该上下文中使用关联数组而不是对象,方法是返回 json_decode($json,true) 并将其视为数组。

首先,请确保打开错误报告,以便查看失败的确切原因。

传递给json_decode不正确的格式只会返回 false。 这是PHP的json处理的限制之一,他们试图在下一个版本中通过创建一个JSONSerializable接口来解决。 确保解码的返回是stdClass的实例(如果已传递关联数组的选项,则返回数组),否则循环将永远不会执行。