0

我使用 nodejs 解析一些 JSON 文件并将它们插入 mongodb,这些文件中的 JSON 具有无效的 JSON 字符,如 \n、\" 等。我不明白的是,如果我试图解析如下:

console.log(JSON.parse('{"foo":"bar\n"}'))

我明白了

   undefined:1
  {"foo":"bar

但是如果我尝试解析文件中的输入(文件具有相同的字符串 {"foo":"bar\n"}),例如:

new lazy(fs.createReadStream("info.json"))
    .lines
    .forEach(function(line){    
var line = line.toString(); 
        console.log(JSON.parse(line));
    }
);

一切正常,我想知道这是否正常并且可以解析我拥有的文件,或者我应该在解析文件之前替换所有无效的 JSON 字符,以及为什么两者之间存在差异。

谢谢

4

1 回答 1

3

如果您可以阅读"\n"您的文本文件,那么它不是行尾,而是\后跟n.

\n在 JavaScript 字符串文字中添加行尾,并且它们在 JSON 字符串中是被禁止的。

json.org

在此处输入图像描述

要在 JSON 字符串中添加行尾,您必须对其进行转义,这意味着您必须对\JavaScript 字符串中的 进行转义,以便在接收到的字符串中有“\n” JSON.parse

console.log(JSON.parse('{"foo":"bar\\n"}'))

这将产生一个对象,其 foo 属性值将包含行尾:

在此处输入图像描述

于 2013-06-24T17:40:00.747 回答