【问题标题】:how to fix a malformed JSON in php如何在 php 中修复格式错误的 JSON
【发布时间】:2011-10-18 04:17:16
【问题描述】:

我有这个 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 中自动修复它,以便对其进行解码。 一些代码会很有帮助 谢谢。

【问题讨论】:

  • 您的意思是要解码字符串吗?
  • Err...您拥有一个 JSON 字符串,并且想要将其编码为 JSON?编码意味着将对象或数组转换为 JSON。你不能从一个字符串开始,如果你已经有一个 JSON 字符串,那么你可能真的不想这样做。

标签: php parsing json


【解决方案1】:

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

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

您可以通过创建需要实际转义的字符列表来做到这一点,然后解析整个字符串以获得转义字符,如果找到,检查下一个字符是否需要转义,然后采取行动。

但这只是一种策略,而且由于输入未正确编码,因此修复问题并不容易,因为它们已经损坏了。

【讨论】:

    【解决方案2】:

    使用 json lint,看来问题出在 src\=

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

    如果您将 src\= 替换为 src=,它将通过验证器。

    修复:

    1. 首先修复生成 json 字符串的代码。

    1. 使用 str_replace 将 'src\=' 更改为 'src='

    【讨论】:

      猜你喜欢
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      • 1970-01-01
      相关资源
      最近更新 更多