在 TypeScript 中合并多个 JSON 文件

Merging several JSON files in TypeScript

我目前的任务是查找特定电子邮件与我们联系的次数。联系人存储在 JSON 个文件中,密钥应为“电子邮件”。

事情是可能有无限的 JSON 个文件,所以我想将它们合并到一个对象中并迭代以计算电子邮件频率。

为了清楚起见,我需要阅读 JSON 内容。将其生成为日志 消费消息 将该消息转换为使用的每封电子邮件的日志记录。

我的思考过程可能有误,但我想我需要将所有 JSON 文件合并到一个对象中,然后我可以在需要时对其进行迭代和操作。但是我相信我对它的同步性有疑问。

我正在使用 fs 读入(我认为在本例中为 100 JSON 个文件)运行 一个 forEach 并试图将每个推入一个数组,但该数组返回为空。我确信我遗漏了一些简单的东西,但在阅读 fs 的文档后,我想我可能只是遗漏了它。

const fs = require('fs');

let consumed = [];
const fConsume = () => {
  fs.readdir(testFolder, (err, files) => {
    files.forEach(file => {
      let rawData = fs.readFileSync(`${testFolder}/${file}`);
      let readable = JSON.parse(rawData);
      consumed.push(readable);
    });
  
  })
}
fConsume();
console.log(consumed);

作为参考,这是每个 JSON 对象的样子,每个导入的文件都有几个。

{
      id: 'a7294140-a453-4f3c-91b6-210819e2c43e',
      email: 'ethan.hernandez@microsoft.com',
      message: 'successfully handled skipped operation.'
    },

fs.readdir() 是异步的,所以你的函数 returns 在它执行回调之前。这里如果要使用同步代码,需要使用fs.readdirSync()代替:

const fs = require('fs');

let consumed = [];
const fConsume = () => {
  const files = fs.readdirSync(testFolder)
  files.forEach(file => {
    let rawData = fs.readFileSync(`${testFolder}/${file}`);
    let readable = JSON.parse(rawData);
    consumed.push(readable);
  });  
}
fConsume();
console.log(consumed);