我使用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字符, 为什么两者之间存在差异。
谢谢
答案 0 :(得分:3)
如果您的文字文件可以阅读"\n"
,那么它不是行尾,而是\
字符后跟n
。
\n
添加了行尾,并且它们在JSON字符串中被禁止。
请参阅json.org:
要在JSON字符串中放置行尾,必须将其转义,这意味着您必须转义JavaScript字符串中的\
,以便{{1}收到字符串中的“\ n” }:
JSON.parse
这将生成一个对象,其foo属性值将包含行尾: