【问题标题】:Getting error while reading json file using node.js使用 node.js 读取 json 文件时出错
【发布时间】:2021-01-27 17:18:25
【问题描述】:

使用 Node.js 读取 json 文件时出现以下错误。我在下面解释我的代码。

SyntaxError: Unexpected token # in JSON at position 0
    at JSON.parse (<anonymous>)

我的 json 文件如下所示。

test.json:

#PATH:/test/
#DEVICES:div1
#TYPE:p1
{
  name:'Raj',
  address: {
     city:'bbsr'
  }
}

这个 json 文件有一些 # 包含的字符串。在这里,我需要从该文件中删除那些 # 包含的字符串。我在下面解释我的代码。

fs.readdirSync(`${process.env['root_dir']}/uploads/${fileNameSplit[0]}`).forEach(f => {
        console.log('files', f);
        let rawdata = fs.readFileSync(`${process.env['root_dir']}/uploads/${fileNameSplit[0]}/${f}`);
         let parseData = JSON.parse(rawdata);
         console.log(parseData);
}); 

在这里,我尝试先阅读代码,但出现上述错误。我需要从 json 文件中删除那些 # 包含的行,然后读取所有数据并将删除的行转换为像 const obj ={PATH:'/test/',DEVICES:'div1',TYPE:p1} 这样的对象。这里我使用 node.js fs 模块来实现这一点。

【问题讨论】:

  • 我看不到您要删除# 的位置。在尝试使用 JSON.parse 解析它之前,您需要这样做
  • 这能回答你的问题吗? How to remove one line from a txt file
  • 这不是有效的 JSON,因此是错误的。这正是错误消息告诉您的内容。
  • @WagnerMattei:读取文件时出现错误。我在帖子中也提到过。
  • @JeremyThille:不,这不是同一个帖子。

标签: node.js json fs


【解决方案1】:

如您所说,您需要从 JSON 文件中删除那些 # 行。您需要自己编写代码。为了解决这个问题,通过向readFileSync 提供字符集,将文件读入字符串而不是缓冲区。

const text = fs.readFileSync(path, 'utf8');
console.log(text);
const arr = raw.split("\n");
const noComments = arr.filter(x => x[0] !== "#"));
const filtered = noComments.join("\n");
const data = JSON.parse(filtered);
console.log(data);

【讨论】:

  • 但这不是答案。这是一个提示。答案将是您没有编写的代码部分。
  • @Joel :是的,这是一个很好的提示。你能按照我的帖子完成你的代码吗?
  • @JeremyThille 当然,但恕我直言,这更符合 SO 的精神。我已经添加了缺失的代码,但我担心如果 OP 只是简单地复制答案,他们不会理解它,如果他们解决了 AB 问题并且可以自己解决并学习,那就更好了。
  • @subhra_edqart 很好,我添加了该算法的一个基本版本。你的问题是'utf8'部分,而不是算法,所以试着真正理解这里的所有行和逻辑,而不是让它工作:)
  • @subhra_edqart 很抱歉,我不会编写您的整个业务逻辑 - 您尝试什么来获取已删除的 # 行?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2020-10-11
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 2016-02-07
  • 2014-09-26
相关资源
最近更新 更多