Javascript 在Node.js中迭代大量JSON文件
我有下面的代码,我只想一个接一个地迭代一堆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
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文件的示例。这些是异步调用,您不能使用简单的循环它们。对于,您需要使用异步模块或类似于节点漫游的东西