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

2022-09-16 11:43:10 +08:00
 leeqingshui

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

在三方调用中,调用第三方文件上传接口进行文件传输非常常见,对文件上传接口记录日志时,由于 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 报文的某个字段及值呢?

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

1057 次点击
所在节点    程序员
3 条回复
lmshl
2022-09-16 12:00:05 +08:00
写 JSON Viewer 的时候碰到过类似需求,实现方式很简单,就是
public String truncate(json: Json) {
如果 Array 元素超多,或者字符串超长,则截断至某个位置,比如"一个超长的字符串<截断剩余长度 9999>"
递归
}
xaplux
2022-09-16 13:03:08 +08:00
JsonPath 或者 正则替换
leeqingshui
2022-09-19 08:38:13 +08:00
@lmshl
@xaplux 好的,感谢回复,我去了解下~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/880509

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX