【问题标题】:Json String can't decode when end of string have `\'当字符串结尾有“\”时,Json 字符串无法解码
【发布时间】:2015-04-08 11:27:42
【问题描述】:

当 JSON 字符串在任何字符串的末尾有 \ 时,它给了我:

Ext.JSON.decode(): 你试图解码一个无效的 JSON 字符串

JSON 解码错误:

Uncaught Ext.JSON.decode():您正在尝试解码无效的 JSON 字符串:

[{"ID1":"1","ID2":"1","NAME":"Act\"},{"ID1":"3","ID2":"1","NAME":"Act\"},{"ID1":"4","ID2":"2","NAME":"act $#%^&&*"},{"ID1":"2","ID2":"2","NAME":"act $#%^&&*"}]

如何避免上述错误?

【问题讨论】:

  • 你的 JSON 确实是无效的,所以修复它
  • 你的 JSON 来自哪里?

标签: javascript json decode extjs4.2


【解决方案1】:

这是无效的 JSON,因为 \ 字符转义了负责关闭字符串的 " 标记 - 因此,您的字符串保持未关闭状态(也就是说,直到下一个 " 出现)。

所以你的问题是反斜杠在字符串中具有特殊含义。如果要使用斜线,请改用\\。 (请注意,这样做是转义反斜杠字符本身。)

即:

{"ID1":"1","ID2":"1","NAME":"Act\\"}

【讨论】:

    【解决方案2】:

    您需要转义该反斜杠。一开始我以为你只需要使用一个转义字符,但是according to this demonstration,你需要使用三个:

    {"ID1":"1","ID2":"1","NAME":"Act\\\\"}
    

    【讨论】:

    • 这是误导。 JSON 需要 \\ 来编码反斜杠。 Javascript 要求 \\ 在字符串文字中编码反斜杠。因此,要在 javascript 字符串文字中的 json 数据中表示 \,您需要 \\\\
    • 但是,您永远不需要将 JSON 放在 js 字符串文字中
    • @Eric,感谢您的澄清。这确实让我感到困惑。
    【解决方案3】:

    如果您测试您的 JSON,您会发现它无效:http://jsonlint.com/ 你需要用另一个 \

    来逃避你的 \
    \\Act
    

    您应该在之前对 JSON 进行编码,或者尽可能手动进行编码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2019-04-03
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多