JSON.parse文件输入与解析字符串文字不同

时间:2013-06-24 17:35:41

标签: json node.js parsing

我使用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字符, 为什么两者之间存在差异。

谢谢

1 个答案:

答案 0 :(得分:3)

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

JavaScript字符串文字中的

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

请参阅json.org

enter image description here

要在JSON字符串中放置行尾,必须将其转义,这意味着您必须转义JavaScript字符串中的\,以便{{1}收到字符串中的“\ n” }:

JSON.parse

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

enter image description here