【问题标题】:JSON.parse file input differ from parsing string literalJSON.parse 文件输入不同于解析字符串文字
【发布时间】:2013-06-21 07:37:32
【问题描述】:

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

谢谢

【问题讨论】:

    标签: json node.js parsing


    【解决方案1】:

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

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

    json.org

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

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

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

    【讨论】:

    • 我明白了,谢谢你,但是如果我希望字符串文字中的 \n 是普通字符而不是换行符,我该怎么写(\n 无效,\\n 是换行)?
    • 我明白了 '{"foo":"bar\\\\n"}' :)
    猜你喜欢
    • 2021-01-05
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    相关资源
    最近更新 更多