我正在通过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
的实例(如果已传递关联数组的选项,则返回数组),否则循环将永远不会执行。