这个方法带有一个bug,它将在字符串中删除JSON之前的字符,例如,这一行日志输出:
10月2日21:37:03 ip-172-31-9-171 ubuntu:“开放”
因此,我有一个方法来删除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;
}发布于 2019-10-02 22:31:09
这假设字符串中总是有一个[“或{”),您可能希望添加一个条件,以便在不存在的情况下,或者它只返回您看到的最后一个字符,但是这样做的方式非常简洁:
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"]仅仅为该方法创建一个类太复杂了。
https://stackoverflow.com/questions/58209847
复制相似问题