无法解析这个json

时间:2011-07-30 19:18:32

标签: php json

我正在尝试解析

中的json输出
  

http://www.nyc.gov/portal/apps/311_contentapi/services/all.json

我的php json_decode会返回NULL

我不确定问题出在哪里,我尝试通过JSONLint运行一小部分数据,并验证了json。

任何想法?

3 个答案:

答案 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()来确定错误的确切性质。

尝试调用它以查看错误的位置。