JSON.parse 给出字符串中的换行符异常

Dus*_*gal 5 javascript string json node.js

我得到以下字符串:

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

我需要把它变成 JSON 对象。但是,JSON.parse(str)由于\n

我看到了这个问题,但没有帮助。

从那以后,我尝试了 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);
Run Code Online (Sandbox Code Playgroud)

有人可以纠正它吗?

EnK*_*ypt 9

逃到\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
Run Code Online (Sandbox Code Playgroud)

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

console.log(json.message);
Run Code Online (Sandbox Code Playgroud)

  • 正如我在上面的评论中提到的,这可能会将问题转移到其他地方。如果外部系统开始返回一个仍然完全有效的 JSON 字符串(例如)经过美化处理,例如:`'{\n\t"message":"hello world"\n}'`,则此解决方案将引入错误,如你最终会尝试解析不再有效的`'{\\n\\t"message":"hello world"\\n}'`。@DushyantBangal 您的第一个动作应该是至少_询问_另一个系统上的开发人员。修复对他们来说可能是微不足道的,并且是**正确、最强大的长期修复**。 (2认同)