JAVA:如何用正则表达式屏蔽对象值

JAVA:如何用正则表达式屏蔽对象值,java,regex,Java,Regex,我正在屏蔽发送到服务器的日志数据,我需要屏蔽JSON格式的特定值 "Address":{"id":"3746658","buildingHouseNumber":"5","street":"mathew rd","postTown":"asdf, sdf","postCode":"abc

我正在屏蔽发送到服务器的日志数据,我需要屏蔽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的所有instance

正则表达式有没有一种方法可以实现我粘贴在上面的输出,或者像这样的输出:
地址:{“***”}

(:”).*?“将选择值以及分号和引号。在Java中,以下内容将用替换值*

String clearTextJsonString = "\"Address\":{\"id\":\"3746658\",\"buildingHouseNumber\":\"5\",\"street\":\"mathew rd\",\"postTown\":\"asdf, sdf\",\"postCode\":\"abc we32\",\"country\":{\"name\":\"United Kingdom\"}";
String maskedJsonString = clearTextJsonString.replaceAll("(:\").*?\"", ":\"***\"");

您是否将JSON作为字符串或已解析为
JSONObject
?它是一个介于JSON之间的通用字符串…您捕获了需要保留的内容,您只需匹配,而不捕获需要替换的内容。