[英]how do I read a series of JavaScript literals with node.js?
我有一个看起来像的日志文件
日志.txt
{ timestamp: '2019-10-24 04:39:26',
referer: 'websocket',
switch:
{ program:
'elephant',
preview: 'gopher',
id: 1571891966523 } } }
{ 'switch-type': 'non-buffered',
'switch-time': 17,
'preview-loaded': 477,
'video-loaded': 345 } }
{ timestamp: '2019-10-24 04:39:35',
referer: 'websocket',
switch:
{ program: 'gopher',
preview: 'camel',
id: 1571891975677 } } }
{ 'switch-type': 'pre-buffered',
'switch-time': 15,
'preview-loaded': 348 } }
{ timestamp: '2019-10-24 04:39:37',
referer: 'websocket',
switch:
{ program: 'camel',
preview:
'elephant',
id: 1571891977697 } } }
{ 'switch-type': 'non-buffered',
'switch-time': 14,
'preview-loaded': 302,
'video-loaded': 203 } }
...
该日志文件是由一个长期运行的 node.js 脚本生成的,该脚本定期执行
// logging script
...
console.dir(data);
...
我想要一个 node.js 脚本来解析该日志文件并给我一个快速总结。 该 node.js 脚本目前类似于
// analyze_logs.js
var fs = require('fs');
var obj = JSON.parse(fs.readFileSync('file', 'utf8'));
我得到了错误:
JSONDecodeError: Expecting property name enclosed in double quotes
如何使用 node.js 漂亮地打印 JSON 上的评论? 让我意识到上述格式不是(一系列)严格的 JSON 格式。
它是“ 像 JSON,除了没有引号的键”。
如何读取从 console.dir() 打印的数据,无论格式如何,从文本文件到我的 node.js 脚本,并将其解析回正常的 JavaScript object?
当文本文件有一长串这样的对象时,我如何一次读取一个? (似乎有一些JSON 流媒体库读取一系列 JSON 对象,例如npm 流 json ,但它们似乎需要日志记录脚本才能发出严格的 JSON。
也许这不是最好的方法,但它可以工作。
将日志文件拆分为代表单个对象的块:看到上面的日志文件示例,我认为我们可以假设以没有空格开头的行开始一个新的 object。 因此,您可以在文件内容上逐行 go,将这些行连接成一个字符串,如果您找到一个开始新 object 的行,则开始一个新字符串。
一旦你有一个像这样的 object 表示的字符串,你可以使用eval
来解释它。 因为我们知道这是有效的 JS 代码(实际上你必须删除最后一个}
),我们只需通过添加一个虚拟变量将其转换为赋值,然后eval
将返回我们的 object:
const obj = eval(`whatever = { timestamp: '2019-10-24 04:39:26',
referer: 'websocket',
switch:
{ program:
'elephant',
preview: 'gopher',
id: 1571891966523 } }`); // here I removed the last }
console.log(obj.switch.program); // prints elephant
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.