我有一个对象的 .log 文件,如何将它们转换为 JSON 对象以便在 Javascript 中进行迭代?
Posted
技术标签:
【中文标题】我有一个对象的 .log 文件,如何将它们转换为 JSON 对象以便在 Javascript 中进行迭代?【英文标题】:I have a .log file of objects how do I convert them to a JSON object for iterating through in 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 格式。我正在尝试读取文件,然后将其拆分为新行,但这似乎不起作用。
【问题讨论】:
【参考方案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)
希望对你有帮助。
【讨论】:
以上是关于我有一个对象的 .log 文件,如何将它们转换为 JSON 对象以便在 Javascript 中进行迭代?的主要内容,如果未能解决你的问题,请参考以下文章