java - JAVA:如何使用正则表达式屏蔽对象值
问题描述
我正在屏蔽发送到服务器的日志数据,我需要屏蔽 JSON 格式的特定值
"Address":{"id":"3746658","buildingHouseNumber":"5","street":"mathew rd","postTown":"asdf, sdf","postCode":"abc we32","country":{"name":"United Kingdom"}
我希望输出为:
"Address":{"id":"***","***":"***","street":"***","postTown":"***","postCode":"***","country":{"name":"***"}
我试过正则表达式:
"\"Address\":{\"(.*)\"}"
但这不能取代国内的内容,因为其中还有一个对象,并且它与县的右括号一起过早地完成。这个正则表达式应该产生如下结果:Address:{"***"}
这也不是一个合法的 JSON(但可以这样生活,因为这只是在日志中。虽然如果我们可以放置一个实际的对象而不会使 JSON 损坏,那就太好了)
我还尝试了另一个正则表达式,我可以像上面想要的输出一样替换单个键的值。
"\"buildingHouseNumber\":\"([^\"]+)"
尽管存在一个问题,但此正则表达式在选择值方面效果很好,它只选择了值并忘记了buildingHouseNumber
键,因此,当我在日志中进行替换时,它会用相同的值替换所有条目。例如。如果 buildingnumber 为 10,它将替换日志中所有 10 的实例。
有没有一种使用正则表达式的方法,通过它我可以实现上面粘贴的输出或输出,如:Address: {"***"}
?
解决方案
(:").*?" would select the values along with the semi-colon and the quotes. In Java, following would replace the values with *
String clearTextJsonString = "\"Address\":{\"id\":\"3746658\",\"buildingHouseNumber\":\"5\",\"street\":\"mathew rd\",\"postTown\":\"asdf, sdf\",\"postCode\":\"abc we32\",\"country\":{\"name\":\"United Kingdom\"}";
String maskedJsonString = clearTextJsonString.replaceAll("(:\").*?\"", ":\"***\"");
推荐阅读
- c# - C# 如何将一组整数变量转换为字节数组?
- c++ - Gradle - Visual C++ 编译器、vcpkg 和外部库
- java - HTL data-sly-use 的用法?
- python-3.x - 熊猫数据框组/块的标准化(如何快速插入行)
- python - 尝试挂载卷时出现python kubernetes API错误
- angular - 使用 Graph QL 放大如何查询相关对象
- excel - 在 Excel 中对具有不均匀数据集的两列进行排序和匹配
- angular - 触发observer.error产生控制台错误
- sql-server - 生成没有文件组的脚本
- flutter - Flutter 中有没有办法让两个用户共享一个屏幕?