【问题标题】:JSON.parse gives exception with newline character in stringJSON.parse 在字符串中出现换行符异常
【发布时间】:2016-06-14 11:39:53
【问题描述】:

我得到以下字符串:

var str='{"message":"hello\nworld"}';

我需要把它变成 JSON 对象。但是,当我尝试JSON.parse(str) 时出现异常,因为\n

我看到this 的问题,但没有帮助。

从那以后,我尝试了 var j=JSON.parse(JSON.stringify(str))

但是当我使用typeof j时,我仍然得到字符串而不是对象

我知道使用\\n 有效,但问题是,当我需要使用该值时,它不会在新行上打印。

更新: 好的,我刚刚意识到\\n 正在工作。 我正在使用它来将\n 转换为\\n

var str='{"message":"hello\nworld"}';
str=str.replace(/\n/g, "\\\\n").replace(/\r/g, "\\\\r").replace(/\t/g, "\\\\t");

var json=JSON.parse(str);

console.log(json.message);

有人可以改正吗?

【问题讨论】:

  • 为什么不使用<br/>标签?
  • “我知道使用\\n 有效,但问题是,当我需要使用该值时,它不会在新行上打印。” 这是你的部分需要修复 - \\n 在这里是正确的,假设您希望 "message" 包含一个新行,因为新行本身在 JSON 中无效。
  • @PawanNogariya 它是一个字符串,我没有使用它形成 html 标签。我正在我的网络服务中获取数据。
  • @JamesThorpe,console.log(j.message) 不会在新行上打印它
  • 我确实将它打印在 cosole 的新行中,请参阅这个小提琴 jsfiddle.net/s8d8k3on

标签: javascript json node.js string


【解决方案1】:

\n 转义到\\n 是正确的做法。在您的代码中,替换调用是错误的。你需要更少的斜线。更新了您的代码:

var str='{"message":"hello\nworld"}';
str=str.replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t");

var json=JSON.parse(str); //No errors due to escaping

现在打印它,你会看到文本被分成不同的行。

console.log(json.message);

【讨论】:

  • 它是一个字符串,我没有使用它形成 html 标签。我正在我的网络服务中获取数据。我需要将它存储在我的数据库中。它不适用于在浏览器上显示。
  • 您可以将它存储在您的数据库中,这不是问题。如果您想解决它不显示在浏览器上的问题,请在打印之前使用我在答案中编写的功能。例如:document.write(nl2br("hello\nworld"))
  • 嗯,我的总体目标非常不同。太大了,无法解释我到底想要做什么。只需要让有问题的 UPDATE 中的代码正常工作。
  • 正如我在上面的 cmets 中提到的,这可能会将问题转移到其他地方。如果外部系统开始返回一个仍然是完全有效的 JSON 字符串(例如),例如:'{\n\t"message":"hello world"\n}',则此解决方案将引入错误,因为您最终将尝试解析不再有效的 '{\\n\\t"message":"hello world"\\n}' . @DushyantBangal 您的第一个操作应该是至少询问另一个系统上的开发人员。修复对他们来说可能微不足道,并且是正确、最可靠的长期修复
  • @JamesThorpe - 同意。我假设 OP 无法控制 API 端点生成的内容。如果不是这样,他就不应该有最初的问题。
猜你喜欢
  • 2014-05-27
  • 2013-08-11
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
  • 2015-10-06
  • 2010-10-01
相关资源
最近更新 更多