【问题标题】:How to avoid parsing "\" in JSON.parse () method如何避免在 JSON.parse() 方法中解析“\”
【发布时间】:2017-09-24 06:35:05
【问题描述】:

我正在尝试将 JSON 解析为 JS 对象,但我遇到了一个属性的问题,该属性的值始终包含“\”字符和后面的四个字符。例如。字符串看起来像这样:

"key": "Z13g\u003d"

一旦我解析它,我就会得到:

"key": "Z13g="

有什么简单的方法可以解决这个问题吗?

【问题讨论】:

  • 为什么这是一个问题? \u003d 是一种在 JSON 字符串中表达 = 的方式。也许您的问题是在您一开始创建 JSON 时未能转义斜线?
  • \u003d 是在 JSON 中表示 = 字符的一种方式。解析器正确地完成了它的工作。
  • @DanZawadzki — 那么您首先错误地生成了 JSON。您需要修复生成 JSON 的工具,而不是尝试破解解析器来处理不是真正 JSON 的数据格式。
  • \u003d 是一个字符而不是 6 个字符。它就像 \n, \t...
  • @DanZawadzki 你有什么证据表明Z13g= 不是正确的键?听起来您认为没有问题是有问题的。 Z13g\u003d 将是一个特别奇怪的键。

标签: javascript json parsing escaping stringify


【解决方案1】:

如果你在 JavaScript 中有一个类似 "\u003d" 的字符串,它与解析后的字符串 "=" 是无法区分的。即使是String.replace 函数也不会在字符串中找到\ 字符。

但是,如果您确实要表示包含反斜杠字符的字符串,则需要使用另一个反斜杠对其进行转义。

"\u003d"代表字符串值"=""\\u003d"代表字符串值"\u003d"

但是,当您调用 JSON.parse 时,事情会变得更加复杂;因为它再次解析字符串值,它会将"\\u003d" 转换为"="

要解决这个问题,您需要对反斜杠进行双重转义,这样您将获得一个字符串值"\\\\u003d"。解析器会将其转换为 "\u003d" 而不是 "="

console.log(JSON.parse("\"\u003d\"")); //    "\u003d" -> "="
console.log(JSON.parse("\"\\u003d\"")); //   "\\u003d" -> "="
console.log(JSON.parse("\"\\\\u003d\"")); // "\\\\u003d" -> "\u003d"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 2016-04-24
    相关资源
    最近更新 更多