【问题标题】:I have a .log file of objects how do I convert them to a JSON object for iterating through in Javascript?我有一个对象的 .log 文件,如何将它们转换为 JSON 对象以便在 Javascript 中进行迭代?
【发布时间】:2018-10-27 05:14:34
【问题描述】:

这是我需要转换的 .log 文件的示例。我正在使用节点。

    {"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 格式。我正在尝试读取文件,然后将其拆分为新行,但这似乎不起作用。

【问题讨论】:

    标签: javascript json node.js fs


    【解决方案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

    【讨论】:

    • 当我在 .log 文件上使用 fs.readFileSync 时,它似乎没有返回我可以拆分的字符串。
    • 您第一次提到这一点 - 那么您应该编辑您的问题以澄清这一点,并发布您的代码
    • 已编辑。对不起。我认为这暗示我正在读取该格式的 .log 文件。
    • 查看编辑 - readFileSync同步运行,而不是异步运行。它不接受回调。
    • 听起来您正在使用的日志文本与您在问题中发布的文本不匹配。
    【解决方案2】:

    我个人使用read-last-lines 包仅获取我的log 文件的最后几行。

    为了使它工作,我不得不稍微修改接受答案中的代码,这对我自己很有帮助。如果有人遇到类似问题,我将在此处添加它。

    readLastLines.read('info.log', 10)
          .then((lines) => {
            const arrOfStringObjs = lines.split('\n')
            let arrOfObjs = []
            arrOfStringObjs.forEach(strObj => {
              if (strObj !== undefined && strObj !== null && strObj !== '') {
                arrOfObjs.push(JSON.parse(strObj))
              }
            });
            console.log(arrOfObjs)
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2017-09-20
      • 1970-01-01
      • 2020-02-21
      • 2019-08-25
      • 1970-01-01
      • 1970-01-01
      • 2014-03-19
      • 2013-04-21
      • 2014-12-23
      相关资源
      最近更新 更多