jsonObject作为字符串-搜索正则表达式以删除密码字段

j2e*_*nue 6 java regex string

我有一个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)

Jam*_*unn 2

尝试这个:

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?)"