Javascript 在Node.js中迭代大量JSON文件

Javascript 在Node.js中迭代大量JSON文件,javascript,json,node.js,Javascript,Json,Node.js,我有下面的代码,我只想一个接一个地迭代一堆JSON文件,直到最后,输出每个文件中每个对象的时间戳 var fs = require('fs'); // Get the contents of the directory and loop over it. fs.readdir('./historical', function(err, list) { for (var i = 0; i < list.length; i++) { // Get the co

我有下面的代码,我只想一个接一个地迭代一堆JSON文件,直到最后,输出每个文件中每个对象的时间戳

var fs = require('fs');

// Get the contents of the directory and loop over it.
fs.readdir('./historical', function(err, list)
{
    for (var i = 0; i < list.length; i++)
    {
        // Get the contents of each file on iteration.
        var filename = list[i];

        fs.readFile("./historical/" + filename, function(err, data)
        {
            for (var index in data)
            {
                index = JSON.parse(index);
                console.log(index.timestamp);
            }
        });
    }
});
var fs=require('fs');
//获取目录的内容并在其上循环。
fs.readdir(“./historical”,函数(err,list)
{
对于(变量i=0;i
这似乎真的很难做任何事情。。。我根本无法让它真正起作用


此外-我知道,事实上,文件中的每个项目都有一个时间戳值。

使用
for(数据中的var索引)
循环的方式是错误的。您需要首先解析json文件以获取json对象

var parsedData = JSON.parse(data);
然后,您可以随心所欲地操作json对象。最好提供json文件示例。但为了以防万一,我描述了两个例子

示例1:
如果json文件表示一个对象,那么使用以下代码

console.log(parsedData.timestamp);
for (var index in parsedData) {
    console.log(index.timestamp);
}
示例2:
如果json文件表示对象数组,则使用以下代码

console.log(parsedData.timestamp);
for (var index in parsedData) {
    console.log(index.timestamp);
}

使用
for(数据中的var索引)
循环的方式是错误的。您需要首先解析json文件以获取json对象

var parsedData = JSON.parse(data);
然后,您可以随心所欲地操作json对象。最好提供json文件示例。但为了以防万一,我描述了两个例子

示例1:
如果json文件表示一个对象,那么使用以下代码

console.log(parsedData.timestamp);
for (var index in parsedData) {
    console.log(index.timestamp);
}
示例2:
如果json文件表示对象数组,则使用以下代码

console.log(parsedData.timestamp);
for (var index in parsedData) {
    console.log(index.timestamp);
}

在您的例子中,数据是一个包含二进制数据的
缓冲区。
实际上,如果指定了编码,则数据只是一个
字符串

我冒昧地将您的整个脚本更新为更新的javascript版本。 和添加文件扩展筛选器

import { readdir, readFile } from "fs";
import * as path from "path";

const dirName = path.join(__dirname, "historical");
readdir(dirName, (err, fileList) => {
  if (err) {
    console.error(err);
    return;
  }

  for (let i = 0; i < fileList.length; i++) {
    const filename = fileList[i];
    if (!filename.toLowerCase().endsWith(".json")) continue;

    const fullFilename = path.join(dirName, filename);
    readFile(fullFilename, { encoding: "utf-8" },
      (err, data) => {
        try {
          const fileContent = JSON.parse(data);
          // todo print whatever you like to print, e.g. console.log(fileContent);
        } catch (err) {
          console.error(`error while parsing file: ${fullFilename}`);
        }
      });
  }
});
从“fs”导入{readdir,readFile};
从“路径”导入*作为路径;
const dirName=path.join(uu dirName,“historical”);
readdir(dirName,(err,fileList)=>{
如果(错误){
控制台错误(err);
回来
}
for(设i=0;i{
试一试{
const fileContent=JSON.parse(数据);
//todo打印您想打印的任何内容,例如console.log(文件内容);
}捕捉(错误){
错误(`error while while:${fullFilename}`);
}
});
}
});

在您的例子中,数据是一个包含二进制数据的
缓冲区。
实际上,如果指定了编码,则数据只是一个
字符串

我冒昧地将您的整个脚本更新为更新的javascript版本。 和添加文件扩展筛选器

import { readdir, readFile } from "fs";
import * as path from "path";

const dirName = path.join(__dirname, "historical");
readdir(dirName, (err, fileList) => {
  if (err) {
    console.error(err);
    return;
  }

  for (let i = 0; i < fileList.length; i++) {
    const filename = fileList[i];
    if (!filename.toLowerCase().endsWith(".json")) continue;

    const fullFilename = path.join(dirName, filename);
    readFile(fullFilename, { encoding: "utf-8" },
      (err, data) => {
        try {
          const fileContent = JSON.parse(data);
          // todo print whatever you like to print, e.g. console.log(fileContent);
        } catch (err) {
          console.error(`error while parsing file: ${fullFilename}`);
        }
      });
  }
});
从“fs”导入{readdir,readFile};
从“路径”导入*作为路径;
const dirName=path.join(uu dirName,“historical”);
readdir(dirName,(err,fileList)=>{
如果(错误){
控制台错误(err);
回来
}
for(设i=0;i{
试一试{
const fileContent=JSON.parse(数据);
//todo打印您想打印的任何内容,例如console.log(文件内容);
}捕捉(错误){
错误(`error while while:${fullFilename}`);
}
});
}
});

每个加载的JSON文件的
数据
上的
JSON.parse()
在哪里?我已经编辑了我的代码,使其看起来与上面一样-似乎仍然不起作用:(请提供一个json文件的示例。这些是异步调用,您不能使用简单的
for
来循环它们。您需要使用异步模块或类似于node walk的东西,在每个加载的json文件的
数据
上使用
json.parse()
?我已经编辑了我的代码,使其看起来像上面那样-似乎仍然不起作用。:(请提供一个json文件的示例。这些是异步调用,您不能使用简单的
循环它们。对于
,您需要使用异步模块或类似于节点漫游的东西