使用换行符

时间:2018-04-09 19:36:52

标签: javascript json api

我有一个导出的函数,它接受一个文件路径。我试图从包含大量数据对象的.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)仅适用于第一行。

2 个答案:

答案 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(",") + "]";