我有一个.log文件的对象如何将它们转换为JSON对象以便在Javascript中进行迭代?

时间:2018-05-17 03:29:27

标签: javascript json node.js fs

以下是我需要转换的.log文件的示例。我正在使用Node。

    {"test": "data", "test1": 123, "foo": "feel me??"}
    {"test": "data", "test1": 123, "foo": "feel me??"}
    {"test": "data", "test1": 123, "foo": "feel me??"}

我使用此代码导入它。

let data = fs.readFileSync(log_path, 'utf8', function(err, data){
  if (err) throw err;
  let tweets = data.split('\n').map(line => JSON.parse(line));

  return tweets;

  fs.close(data, (err) => {
    console.log(err);
  })
})

正如您所看到的,它没有用逗号分隔,因此不是JSON格式。我正在尝试读取该文件,然后将其拆分为新行,但这似乎并没有起作用。

2 个答案:

答案 0 :(得分:1)

假设"feel me??"是一个属性,你可以split向上行,然后map将它们作为一个对象数组:

const text = `    {"test": "data", "test1": 123, "foo": "feel me??"}
    {"test": "data", "test1": 123, "foo": "feel me??"}
    {"test": "data", "test1": 123, "foo": "feel me??"}`;
const arrOfObjs = text.split('\n')
  .map(line => JSON.parse(line));
console.log(arrOfObjs);

另一个问题是顾名思义readFileSync同步读取文件 。它不接受这样的回调。将您的文件读取代码更改为:

let data = fs.readFileSync(log_path, 'utf8');
// do stuff with the `data` string

请记住,因为您没有使用流you don't need fs.close

答案 1 :(得分:0)

我个人使用torch.Size([2941])包来获取read-last-lines文件的最后几行。

要使其正常工作,我必须从接受的答案中稍微修改代码,这对我自己有很大的帮助。如果有人遇到类似问题,我将在此处添加它。

log

希望有帮助。