【问题标题】:JSON Parsing error with backslash带有反斜杠的 JSON 解析错误
【发布时间】:2017-10-01 20:10:33
【问题描述】:

我一直在试图弄清楚为什么以下 JSON 输入将无法在 JSON.parse 函数中解析。

{"World":"Hello\\Test"}

上面的 json 是由 JSON.NET 返回的。

我已经尝试了多种方法来使其正常工作。如您所见,反斜杠被转义,https://jsonlint.com/ 能够解析它。

我在https://jsfiddle.net/ckp0uc0p/3/ 也有一个失败的样本。

任何帮助将不胜感激。

【问题讨论】:

  • 不幸的是,我不控制数据。我标记了 JSON.NET,因为这些数据似乎由该组件解析并以这种方式存储。
  • 您发布的 JSON 是有效的。你到底是如何解析它的?您是否真的将其作为示例中所示的字符串文字注入到 JavaScript 源代码中?
  • @FelixKling 是的,我基本上运行 JSFiddle URL 中发送的内容。问题是,它在被 JSON.NET 序列化后就像存储在数据库中一样,因此,我只是在检索它,我真的不想为“\\”与“\\”进行替换路线\\"。
  • @FelixKling 确实有效。谢谢!

标签: javascript c# json json.net


【解决方案1】:

您需要为每个要显示的反斜杠添加两个\\。如果您正在解析 json,要显示 2 个反斜杠,您需要添加 4。

// inside a string to be parsed as json
var json = '{"World":"Hello\\\\Test"}'
console.log(JSON.parse(json))

// directly in an object
var object = {"World": "Hello\\Test"}
console.log(object)

【讨论】:

  • 如果你只想要一个反斜杠怎么办?这失败了: var s = JSON.parse('{"World":"Hello\\Test"}');
【解决方案2】:

try
{
  var res = '{"World":"Hello\\\\Test"}';
	var s = JSON.parse(res);
  console.log(JSON.stringify(s));
  
} catch(error) {
	alert(error);
}

【讨论】:

    【解决方案3】:

    将 JSON 注入 JavaScript 源代码(使用服务器端语言生成 JavaScript 时)的最佳方法是将其直接注入您需要的地方,而不是在需要的字符串文字中被解析。

    例如:

    var foo = <json blob>;
    

    所以结果会是

    var foo = {"World":"Hello\\Test"};
    

    JavaScript 会将此解释为一个 object literal,从而产生一个 object,这就是你想要得到的。这避免了“嵌套”转义序列的所有问题。

    【讨论】:

      猜你喜欢
      • 2011-06-27
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多