关于php解码JSON的问题
我仍然对php解码JSON有一些疑问。 JSON返回如下关于php解码JSON的问题,php,json,Php,Json,我仍然对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" } ] } ...] }); 这是我
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 />';
}
}
foreach($data->Documents as$result){
回显htmlspecialchars($result->DocTitle)。“
”;
如果(!empty($result->Docmultimedia)){
回显htmlspecialchars($result->Docmultimedia->DocExpire)。“
”;
}
}
它返回警告:为foreach()提供的参数无效。
和echo htmlspecialchars($result->Docmultimedia->DocExpire)
,它写对了吗?谢谢大家。前提条件:
该问题基于MSNBC api()
回答:
API调用
您应该在调用API时不使用尾随的&jsonp=all
,这将使json可计算
API结果
MSN返回一些带有NaN
的值,经证明,NaN不是有效的JSON
结果消化
我提供了一个关于消化要点的
Docmultimedia是一个数组,如“Docmultimedia”所示:[{…}]
您必须调用$result->Docmultimedia[0]->DocExpire
来检索它。或者迭代它
我注意到,在API结果中,从未出现过Docmultimedia
,而DocExpire
是文档的属性。通过$result->DocExpire
先决条件检索它:
该问题基于MSNBC api()
回答:
API调用
您应该在调用API时不使用尾随的&jsonp=all
,这将使json可计算
API结果
MSN返回一些带有NaN
的值,经证明,NaN不是有效的JSON
结果消化
我提供了一个关于消化要点的
Docmultimedia是一个数组,如“Docmultimedia”所示:[{…}]
您必须调用$result->Docmultimedia[0]->DocExpire
来检索它。或者迭代它
我注意到,在API结果中,从未出现过Docmultimedia
,而DocExpire
是文档的属性。首先,您收到的是JSONP,而不是纯JSON。为了解码JSON,您必须删除,all(…)代码>第一个:
$data = trim($json, 'all();');
其次,您需要解码JSON。PHP不会自动执行此操作:
$data = json_decode($data);
现在,您应该可以执行以下操作:
foreach($data->Documents as $result) {
// something
}
首先,您收到的是JSONP,而不是纯JSON。为了解码JSON,您必须删除,all(…)代码>第一个:
$data = trim($json, 'all();');
其次,您需要解码JSON。PHP不会自动执行此操作:
$data = json_decode($data);
现在,您应该可以执行以下操作:
foreach($data->Documents as $result) {
// something
}
您似乎没有正确处理字符串。否则,$data->Documents
将返回一个数组。在我看来很像。您是否检查了$data
是否为false
,$data->Documents
是否不为空?因为JSON数据的开头有all(…)
?对不起,我是个新手。那是什么东西?invlid json?您似乎没有正确处理字符串。否则,$data->Documents
将返回一个数组。在我看来很像。您是否检查了$data
是否为false
,$data->Documents
是否不为空?因为JSON数据的开头有all(…)
?对不起,我是个新手。那是什么东西?invlid json?@Felix Kling如果他没有解析$data,他会在第一个foreach中收到一条错误消息,而不是在htmlspecials中fnc@SamuelHerzog:但他收到错误消息:警告:为foreach()提供的参数无效。不过你是对的,他在循环中错误地访问了其他值。@Felix Kling因为Docmultimedia属性是一个数组,与解码无关,而且他已经循环$data->Documents,我不知道你的答案会是什么help@cj333:您可能希望传递JSON(不带all(..);
)看看它是否有效。@cj333:不知道你的意思。JSONP只是JSON包装在函数调用中。函数调用是all(…)代码>。为了获得JSON字符串,您必须删除它。请查看Wikipedia for JSONP。@Felix Kling如果没有解析$数据,他会在第一个foreach中收到一条错误消息,而不是在htmlspecials中fnc@SamuelHerzog:但他收到错误消息:警告:为foreach()提供的参数无效。不过你是对的,他在循环中错误地访问了其他值。@Felix Kling因为Docmultimedia属性是一个数组,与解码无关,而且他已经循环$data->Documents,我不知道你的答案会是什么help@cj333:您可能希望传递JSON(不带all(..);
)看看它是否有效。@cj333:不知道你的意思。JSONP只是JSON包装在函数调用中。函数调用是all(…)代码>。为了获得JSON字符串,您必须删除它。请查看Wikipedia for JSONP。@cj333能否在gist或codepad(felix和我的示例所在的地方)上发布一个(简化的)代码示例。然后我就可以查看代码了。@cj333:我得到了这个错误:“纬度”:NaN
NaN
在JSON中无效。也许你应该写一份bug报告。@cj333 Gist现在是最新的,提供了所有需要的信息。我用“”包装了所有NaN事件,因此在您的工作应用程序中添加一个实际信息检查,而不是NaN。希望对您有所帮助:)@cj333很高兴帮助您:),我认为用null
替换它是最明智的选择。如果您使用的是我的示例,您只需为此更改$NaNReplacement
。另外,请寻找一种向MSNBC填写错误报告的方法,以便他们能够修复该错误。@cj333:您可以执行str_replace(':NaN',':null',$json)