我有一个json字符串,其内容中的某处将是这样的字符串:
"password": "password2"
Run Code Online (Sandbox Code Playgroud)
它可以在json字符串中的任何位置,所以不要假定它在第一层。它甚至可以在jsonArray中。因此,我需要搜索整个字符串并删除此字段,或者将其值设置为null。
因此,我需要能够搜索整个字符串并替换密码。例如,字符串可能如下所示:
我只想要它进行记录。我的问题是,与第三方共享密码时,我想删除该密码。
我需要在Java中使用正则表达式,该正则表达式将搜索此字符串并将密码值替换为空字符串,或者我甚至可以执行md5的密码。如果不存在密码字符串,它一定不会失败。我怎样才能做到这一点?很清楚,给定任何输入作为字符串,我希望过滤后的结果是:
"password": ""
Run Code Online (Sandbox Code Playgroud)
或者,它可以是一个md5的密码值,而不是null(如果更简单)。你能帮我吗?
因此,我要创建的函数将如下所示:
public String removePasswordFromJsonString(String jsonString){
//.. do the regualar expression work here....
return jsonString;
}
Run Code Online (Sandbox Code Playgroud)
尝试这个:
public String removePasswordFromJsonString(String jsonString){
// Handle null input
if (jsonString == null) {
return null;
}
// Replace all password values with empty strings
return jsonString.replaceAll(
"(\\n?\\s*\"password\"\\s?:\\s?\")[^\\n\"]*(\",?\\n?)", "$1$2");
}
Run Code Online (Sandbox Code Playgroud)
这应该能够用空字符串替换所有出现的密码值,无论它的嵌套有多深。
编辑:这将处理冒号每一侧的零个或一个空格(:)。要处理任意数量的空格,请使用星号 ( *) 而不是问号 ( ?):
"(\\n?\\s*\"password\"\\s*:\\s*\")[^\\n\"]*(\",?\\n?)"