将json文件内容放在数组unsing节点JS中

时间:2017-05-09 12:24:24

标签: json node.js promise bluebird node-modules

所以我有一个目录,我有几个Json文件,由"创建的日期和时间以及#34; .JSON命名。我想创建一个包含所有json内容的数组,意思是

FIle1.json

文件2。 JSON 。 。 。 FIlen.json

应该看[{FIle1.json(content)},{File2.json},...... {Filen.json}]

我是Node.json的新手,任何帮助都是welecomed

更新

所以我列出了我的文件,现在我们没有成功打开它们,这是我的代码:

const testFolder = './report/';
const fs = require('fs');
fs.readdir(testFolder, (err, files) => {
  files.forEach(file => {
    console.log(file);
    fs.readFile(file, {encoding: 'utf-8'}, function(err, data){
      if (err) {
            console.log(err);
            throw err;
        }
       console.log('result read: ' + data);
    });
  });
})

我得到的结果是: 我列出了文件:

  

revision_2017-04-19T16:26:33 + 02:00.json   revision_2017-04-19T16:27:25 + 02:00.json

然后当我想打开它们时:

  

{[错误:ENOENT:没有这样的文件或目录,打开   ' revision_2017-04-19T16:26:33 + 02:00.json']错误:-2,代码:   ' ENOENT',

有没有人有任何想法解决这个问题?

谢谢你们

1 个答案:

答案 0 :(得分:1)

您需要做的是列出目录中的所有文件,然后将它们全部打开并将其内容放在对象中。

为此,您可以使用fs模块(文件系统)列出并打开所有文件,然后将内容放入数组中:

const fs = require('fs');
let myArray = [];
fs.readdir('./your_directory', (err, files) => { // return an array that contains the names of the files in 'your_directory'
  files.forEach(file => { // loop over your files
    fs.readFile(file, {encoding: 'utf-8'}, function(err, data){ // open each file
      // the data variable represents your JSON file
      myArray.push(JSON.parse(data));  
    });
  });
});

你在这里,但是你可能想要回到主要的js范围,所以你可以使用Promises,或使用以下方法:

  • fs.readFileSync
  • fs.readdirSync

它们执行与先前函数(readFile / readdir)相同的操作,但是同步。

希望它有所帮助,
最好的问候,