我还有一些关于php解码JSON的问题。 JSON像这样返回。
all({"Total":30,"Debug":null,"Documents":[
{
"DocTitle":"Image: A municipal police officer takes positio",
"Docmultimedia":[
{
"DocExpire":"2/7/2011 1:39:02 PM"
}
]
}
...]
});
这是我的PHP代码:
foreach ($data->Documents as $result) {
echo htmlspecialchars($result->DocTitle).'<br />';
if(!empty($result->Docmultimedia)){
echo htmlspecialchars($result->Docmultimedia->DocExpire).'<br />';
}
}
返回Warning: Invalid argument supplied for foreach()
。
和echo htmlspecialchars($result->Docmultimedia->DocExpire)
,它写得对吗?谢谢大家。
答案 0 :(得分:2)
前提条件: 问题基于MSNBC api(http://api.msnbc.msn.com/documents/GetDocuments?keyword=usa&jsonp=all)
答案:
API致电
您应该在没有尾随&jsonp=all
的情况下调用API,这将使json可评估
API结果
MSN使用NaN
返回一些值,NaN不是JSONLint证明的有效JSON。
结果摘要
我在GIST上提供 working example 进行消化。
Docmultimedia是一个数组,如“Docmultimedia”所示: [ {...} ]
你必须致电$result->Docmultimedia[0]->DocExpire
来检索它。或者迭代它。
我注意到在API结果中始终没有Docmultimedia
,而DocExpire
是文档的属性。通过$result->DocExpire
检索它。
答案 1 :(得分:2)
首先,您收到的是JSONP,而不是纯JSON。要解码 JSON,您必须首先删除all(...);
:
$data = trim($json, 'all();');
其次,您需要解码JSON。 PHP不会自动执行此操作:
$data = json_decode($data);
现在你应该做的事情:
foreach($data->Documents as $result) {
// something
}