我有以下代码,我想做的就是迭代一堆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);
}
});
}
});
这似乎很难做任何事情......我无法让它真正发挥作用。
另外 - 我知道文件中的每个项目实际上都有一个时间戳值。
所有帮助表示赞赏,我已经在这方面工作了好几个小时!
答案 0 :(得分:2)
使用for (var index in data)
循环是错误的。您需要先解析json文件以获取json对象
var parsedData = JSON.parse(data);
然后你可以按照自己的意愿操纵你的json对象。如果你提供json文件示例会更好。但为了以防万一,我描述了两个例子。
示例1:
如果json文件表示对象,则使用以下代码
console.log(parsedData.timestamp);
示例2:
如果json文件表示对象数组,则使用以下代码
for (var index in parsedData) {
console.log(index.timestamp);
}
答案 1 :(得分:0)
在您的情况下,数据是包含二进制数据的 buffer
。
实际上,如果您指定编码,数据只是一个 string
。
我冒昧地将您的整个脚本更新为更新的 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}`);
}
});
}
});