如何在php中修复格式错误的JSON

时间:2011-08-02 11:18:21

标签: php parsing json

我有这个JSON字符串,我想用json_decode();函数

解码它
{"phase":2,"id":"pagelet_profile_picture","css":["VCxcl","Ix2pq"],"js":["fZYUE","VfnZ3"],"content":{"pagelet_profile_picture":"\u003cdiv class=\"profile-picture\">\u003cspan class=\"profile-picture-overlay\">\u003c\/span>\u003cimg class=\"photo img\" src\=\"http:\/\/profile.ak.fbcdn.net\/hprofile-ak-snc4\/222_111_2222_n.jpg\" alt=\"bla bla\" id=\"profile_pic\" \/>\u003c\/div>"}}

json_last_error();,但它没有帮助我。 (有时得到JSON_ERROR_STATE_MISMATCH和JSON_ERROR_SYNTAX)

我想知道这个JSON字符串有什么问题,以及如何在PHP中自动修复它,以便我可以解码它。 一些代码将非常有用 感谢。

2 个答案:

答案 0 :(得分:2)

使用json lint,似乎问题是src \ =

\转义=符号,这没有任何意义。

如果用src =替换src \ =,它会传递验证器。

修复:

  1. 首先修复生成json字符串的代码。
    1. 使用str_replace将'src \ ='更改为'src ='

答案 1 :(得分:1)

错误编码的问题在于它只是一个错误的编码。然后事情就会破裂。

如果问题与Ben在他的回答中指出的无效转义序列有关,你可以尝试修复这些序列的输入字符串,可能是一个更聪明的算法,正在寻找任何不需要的转义序列,用它替换它通过删除转义字符\,它是非转义值。

您可以通过创建需要实际转义的字符列表,然后解析转义字符的整个字符串,如果找到,检查下一个字符是否需要转义然后处理。

然而,这只是一种策略,并且因为输入没有正确编码,所以要修复它们并不容易,因为它们已经被破坏了。