我有一个导出的函数,它接受一个文件路径。我试图从包含大量数据对象的.txt
文件中读取数据。它们被新行分开(没有逗号或任何东西)。
我需要编写一个以某种方式操作数据的函数,输入将是文件路径。
这就是我所拥有的:
module.exports = {
bot_detection: function(input_file_path) {
fs.readFile(input_file_path, 'utf-8', function(err, data){
if (err) { throw err };
console.log(data);
}
}
}
来自.txt
文件的示例数据:
{"timestamp": 1487184625, "user": "Eric", "action": "navigate"}
{"timestamp": 1487184655, "user": "Bill", "action": "browse"}
{"timestamp": 1487184685, "user": "Eric", "action": "key press"}
{"timestamp": 1487184715, "user": "John", "action": "idle"}
{"timestamp": 1487184755, "user": "Tran", "action": "search"}
{"timestamp": 1487098049, "user": "Tran", "action": "click"}
{"timestamp": 1487098079, "user": "Eric", "action": "click"}
{"timestamp": 1487098109, "user": "Tran", "action": "click"}
{"timestamp": 1487098139, "user": "Bill", "action": "navigate"}
这设法返回数据,但我不确定如何创建一个包含每个对象的数组。我尝试在读取文件范围之外创建一个数组并将data
推入数组,但这并不起作用。有什么建议?由于某种原因,parse.JSON(data)
仅适用于第一行。
答案 0 :(得分:3)
假设您的数据是每行一个有效的JSON对象,由换行符分隔,没有空行,这可行(根据Occam的Razor建议改进):
var objArray = data.split('\n').map(JSON.parse);
答案 1 :(得分:-1)
数据无效JSON编码。没有逗号分隔对象,也没有周围的数组。这是有效的JSON
[
{"timestamp": 1487184625, "user": "Eric", "action": "navigate"},
{"timestamp": 1487184655, "user": "Bill", "action": "browse"},
{"timestamp": 1487184685, "user": "Eric", "action": "key press"},
{"timestamp": 1487184715, "user": "John", "action": "idle"},
{"timestamp": 1487184755, "user": "Tran", "action": "search"},
{"timestamp": 1487098049, "user": "Tran", "action": "click"},
{"timestamp": 1487098079, "user": "Eric", "action": "click"},
{"timestamp": 1487098109, "user": "Tran", "action": "click"},
{"timestamp": 1487098139, "user": "Bill", "action": "navigate"}
]
要存档,您可以(并且应该)更改源以提供有效的json或动态
data = "[" + data.replace(/(?:\r\n|\r|\n)/g, ',').slice(0, -1) + "]";
编辑(alternativ)(灵感来自@ kshetline的答案):
data = "[" + data.split("\n").join(",") + "]";