V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
leeqingshui
V2EX  ›  程序员

记录日志如何去除(清洗)JSON 字符串中的某个字段(比如三方调用时的超大报文字段)?

  •  
  •   leeqingshui · 2022-09-16 11:43:10 +08:00 · 1018 次点击
    这是一个创建于 784 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在实际场景中,我们经常需要记录三方调用日志,当后续遇到问题时好定位与甩锅。

    在三方调用中,调用第三方文件上传接口进行文件传输非常常见,对文件上传接口记录日志时,由于 Base64 字符过大,按理说是不应当保存的。

    举个例子,对下面的请求报文,docContent字段存储了文件的 Base64 格式数据:

    {
      "data": {
        "tNo": "1605f4931032022090714473840657",
        "files": [
          {
            "fileCode": "HH03",
            "docContent": "超长的文件 Base64 字符超长的文件 Base64 字符超长的文件 Base64 字符超长的文件 Base64 字符 YQIAAAA=",
            "fileName": "一个文件",
            "fileSuffix": ".pdf"
          }
        ],
        "status": "2"
      }
    }
    

    那么,如何在记录日志时不记录该字段呢?

    各位大佬,有什么办法,可以比较方便的将上面的报文清洗为如下格式:

    {
      "data": {
        "tNo": "1605f4931032022090714473840657",
        "files": [
          {
            "fileCode": "HH03",
            "fileName": "一个文件",
            "fileSuffix": ".pdf"
          }
        ],
        "status": "2"
      }
    }
    

    我知道通过 OGNL 相关工具类可以通过一个表达式取出 JSON 报文的某个字段数据,比如:

    public void test(){
        // JSON 报文
        String json = "上面的示例 json 报文";
        // 表达式
        String expression = "data.files.fileCode"
        // 通过表达式获取 json 报文的某个字段属性
        String fileCode = ognlUtils.get(json, expression, String.class);
    }
    
    

    那么,有没有某种工具类也可以通过形如"data.files.fileCode"的表达式去除 JSON 报文的某个字段及值呢?

    各位大佬,想请教下~~~

    3 条回复    2022-09-19 08:38:13 +08:00
    lmshl
        1
    lmshl  
       2022-09-16 12:00:05 +08:00
    写 JSON Viewer 的时候碰到过类似需求,实现方式很简单,就是
    public String truncate(json: Json) {
    如果 Array 元素超多,或者字符串超长,则截断至某个位置,比如"一个超长的字符串<截断剩余长度 9999>"
    递归
    }
    xaplux
        2
    xaplux  
       2022-09-16 13:03:08 +08:00
    JsonPath 或者 正则替换
    leeqingshui
        3
    leeqingshui  
    OP
       2022-09-19 08:38:13 +08:00
    @lmshl
    @xaplux 好的,感谢回复,我去了解下~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2536 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:34 · PVG 09:34 · LAX 17:34 · JFK 20:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.