首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JSON启动之前删除行的开头

在JSON启动之前删除行的开头
EN

Stack Overflow用户
提问于 2019-10-02 21:54:21
回答 1查看 39关注 0票数 0

这个方法带有一个bug,它将在字符串中删除JSON之前的字符,例如,这一行日志输出:

10月2日21:37:03 ip-172-31-9-171 ubuntu:“开放”

因此,我有一个方法来删除JSON前面的文本:

代码语言:javascript
复制
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;
  }
}

所以

代码语言:javascript
复制
 console.log(
   new TrimJSON()
    .sliceStr('Oct  2 21:37:03 ip-172-31-9-171 ubuntu: ["opstop"]')
 )

产量:']'

因为那是最后一个角色。原因是因为这些价值观:

代码语言:javascript
复制
{ i: -1, iz: -1, ib: 40 }

有什么好办法来缓解这种情况吗?我的解决方案是这样的,而且很难看:

代码语言:javascript
复制
  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;
  }
EN

回答 1

Stack Overflow用户

发布于 2019-10-02 22:31:09

这假设字符串中总是有一个[“或{”),您可能希望添加一个条件,以便在不存在的情况下,或者它只返回您看到的最后一个字符,但是这样做的方式非常简洁:

代码语言:javascript
复制
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"]

仅仅为该方法创建一个类太复杂了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58209847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档