node.js - 在 JSON 开始之前删除行首
问题描述
我有一个带有错误的方法,它将删除字符串中 JSON 之前的字符,例如这行日志输出:
10 月 2 日 21:37:03 ip-172-31-9-171 ubuntu:[“opstop”]
所以我有这个方法来删除 JSON 之前的文本:
class TrimJSON {
sliceStr(o: string) {
const ib = o.indexOf('["');
const iz = o.indexOf('{"');
if (ib > 0 || iz > 0) {
let i = Math.min(ib, iz);
console.log({i,iz,ib});
o = o.slice(i);
}
return o;
}
}
所以
console.log(
new TrimJSON()
.sliceStr('Oct 2 21:37:03 ip-172-31-9-171 ubuntu: ["opstop"]')
)
将产生:']'
因为那是最后一个字符。原因是因为这些值:
{ i: -1, iz: -1, ib: 40 }
有什么好的方法可以缓解这种情况吗?我的解决方案看起来像这样,而且非常难看:
sliceStr(o: string) {
const ib = o.indexOf('["');
const iz = o.indexOf('{"');
if (ib > 0 && ib >= iz) {
o = o.slice(ib);
}
else if(iz > 0 && iz >= ib){
o = o.slice(ib);
}
console.log('sliced json-stream string:', o);
return o;
}
解决方案
这假设字符串中总是有一个 [" 或 {" ,您可能想要添加一个条件,当不存在时,或者它只会返回您所看到的最后一个字符,但这会以漂亮的方式完成简洁的方式:
function trimJSON(log) {
const i = log.indexOf('{"') > -1 ? log.indexOf('{"') : log.indexOf('["');
return log.slice(i);
}
console.log(trimJSON('Oct 2 21:37:03 ip-172-31-9-171 ubuntu: ["opstop"]'));
// ["opstop"]
仅为该方法创建一个类过于复杂。
推荐阅读
- c# - 在全屏应用程序(游戏)上显示窗口
- python - 如何在不使用熊猫的情况下在 python 中加入 2 个 csv。
- google-maps - 拖入 vue2-google-map 后如何获取标记位置?
- ssl - SSL 证书过期 | Plesk 中的错误
- r - 将空间点数据框叠加到栅格上后如何保存
- http - 如何使用会话在 http 和 https laravel 5.1 之间保持活动状态
- python - Pickle:存储变量的内容
- c - 单行语句
- php - 我正在寻找复制另一个网站的一部分并将其粘贴到我的
- r - 如何检查矩阵中的每个值是否介于 R 中其他两个矩阵中的对应值之间?