我正在尝试解析
中的json输出http://www.nyc.gov/portal/apps/311_contentapi/services/all.json
我的php json_decode
会返回NULL
我不确定问题出在哪里,我尝试通过JSONLint运行一小部分数据,并验证了json。
任何想法?
答案 0 :(得分:3)
错误在本节中:
{
"id":"2002-12-05-22-24-56_000010083df0188b4001eb56",
"service_name":"Outdoor Electric System Complaint",
"expiration":"2099-12-31T00:00:00Z",
"brief_description":"Report faulty Con Edison equipment, including dangling or corroded power lines or "hot spots.""
}
查看“热点”的位置。在一个已经引用的字符串中。那些"
应该已被转义。由于您无权编辑JSON,因此您可以搜索"hot spots.""
并将其替换为\"hot spots.\""
,例如str_replace('"hot spots.""', '\\"hot spots.\\""\, $str);
,只要它在那里。当然,只有这是一次性事情才有帮助。如果网站继续在其JSON输出中出错,则必须提出更复杂的内容。
答案 1 :(得分:1)
我做了什么来识别JSON中的错误...
由于错误的引用是首先要查找的内容,我将JSON下载到文本文件中,在文本编辑器中打开(我使用vim但任何功能齐全的编辑器都可以),运行搜索并替换删除所有字符除了双引号并查看结果。很明显,正确的行应该有4个双引号,所以我只是搜索5个双引号并找到第一个坏行。我注意到行号,然后解除搜索并替换以获取原始文件并查看该行。这为您提供了使API的开发人员修复JSON所需的内容。
编写代码以便在将错误的JSON提供给json_decode()
之前自动修复它将会更加困难,但使用其他答案中的技术可以做到这一点。
答案 2 :(得分:0)
根据PHP手册:
如果解码失败,可以使用json_last_error()来确定错误的确切性质。
尝试调用它以查看错误的位置。