Java,Regex:用字段键替换Json中的字段
要求: 对于键与指定常量匹配的每个Json字段,用另一个常量替换值Java,Regex:用字段键替换Json中的字段,java,regex,Java,Regex,要求: 对于键与指定常量匹配的每个Json字段,用另一个常量替换值 {"regular":"a", "sensitive":"b"} 参数“敏感”,“敏感”。 预期: {"regular":"a", "sensitive":"*****"} 值周围可能有双引号,也可能没有双引号。替换常数始终为双值。Json可能格式不正确。最好是Java实现 键比较不区分大小写。您可以使用正向查找来实现这一点: public static void main(String[] args) { Stri
{"regular":"a", "sensitive":"b"}
参数“敏感”,“敏感”。
预期:
{"regular":"a", "sensitive":"*****"}
值周围可能有双引号,也可能没有双引号。替换常数始终为双值。Json可能格式不正确。最好是Java实现
键比较不区分大小写。您可以使用正向查找来实现这一点:
public static void main(String[] args) {
String s = "{\"regular\":\"a\", \"sensitive\":\"b\"}";
String key = "sensitive";
String val = "****";
System.out.println(s.replaceAll("(?<=\"" + key + "\":\")(\\w+)", val));
key = "regular";
System.out.println(s.replaceAll("(?<=\"" + key + "\":\")(\\w+)", val));
}
您可以使用正向查找来实现这一点:
public static void main(String[] args) {
String s = "{\"regular\":\"a\", \"sensitive\":\"b\"}";
String key = "sensitive";
String val = "****";
System.out.println(s.replaceAll("(?<=\"" + key + "\":\")(\\w+)", val));
key = "regular";
System.out.println(s.replaceAll("(?<=\"" + key + "\":\")(\\w+)", val));
}
根据您的“JSON”的格式有多不正确,以下可能会起作用-如果没有,我们需要更多的测试用例:
"sensitive"\s*:\s* # match "sensitive":
( # capture in group 1:
"[^"]*" # any quoted value
| # or
[^\s,{}"]* # any unquoted value, ending at a comma, brace or whitespace
) # end of group 1
在Java中:
String resultString = subjectString.replaceAll(
"(?x)\"sensitive\"\\s*:\\s* # match \"sensitive\":\n" +
"( # capture in group 1:\n" +
" \"[^\"]*\" # any quoted value\n" +
"| # or\n" +
" [^\\s,{}\"]* # an unquoted value, ending at comma, brace or whitespace\n" +
") # end of group 1",
"\"sensitive\":\"******\"");
测试它。根据您的“JSON”格式有多不正确,以下可能会起作用-如果没有,我们需要更多的测试用例:
"sensitive"\s*:\s* # match "sensitive":
( # capture in group 1:
"[^"]*" # any quoted value
| # or
[^\s,{}"]* # any unquoted value, ending at a comma, brace or whitespace
) # end of group 1
在Java中:
String resultString = subjectString.replaceAll(
"(?x)\"sensitive\"\\s*:\\s* # match \"sensitive\":\n" +
"( # capture in group 1:\n" +
" \"[^\"]*\" # any quoted value\n" +
"| # or\n" +
" [^\\s,{}\"]* # an unquoted value, ending at comma, brace or whitespace\n" +
") # end of group 1",
"\"sensitive\":\"******\"");
测试它。您可以使用以下正则表达式:
String t= "{\"regular\":\"a\", \"sensitive\":\"b\"}"; //{"regular":"a", "sensitive":"b"}
String r = t.replaceAll("(\\s*)\"?sensitive\"?\\s*:\\s*\"?b\"?\\s*", "$1\"sensitive\":\"*****\"");
System.out.println("output "+r); //output {"regular":"a", "sensitive":"*****"}
t= "{\"regular\":\"a\",sensitive:b}"; //{"regular":"a", "sensitive":"b"}
r = t.replaceAll("(\\s*)\"?sensitive\"?\\s*:\\s*\"?b\"?\\s*", "$1\"sensitive\":\"*****\"");
System.out.println("output "+r); //output {"regular":"a","sensitive":"*****"}
演示:您可以使用以下正则表达式:
String t= "{\"regular\":\"a\", \"sensitive\":\"b\"}"; //{"regular":"a", "sensitive":"b"}
String r = t.replaceAll("(\\s*)\"?sensitive\"?\\s*:\\s*\"?b\"?\\s*", "$1\"sensitive\":\"*****\"");
System.out.println("output "+r); //output {"regular":"a", "sensitive":"*****"}
t= "{\"regular\":\"a\",sensitive:b}"; //{"regular":"a", "sensitive":"b"}
r = t.replaceAll("(\\s*)\"?sensitive\"?\\s*:\\s*\"?b\"?\\s*", "$1\"sensitive\":\"*****\"");
System.out.println("output "+r); //output {"regular":"a","sensitive":"*****"}
演示:使用正则表达式操作JSON不是一个好主意。使用一些JSONlibrary@TheLostMind我有一个要求,Json可能格式不正确。那么,在这种情况下,有办法做到这一点。尽管我已经对此添加了一个答案,但我强烈建议避免使用正则表达式处理JSON不是一个好主意。使用一些JSONlibrary@TheLostMind我有一个要求,Json可能格式不正确。那么,在这种情况下,有办法做到这一点。尽管我已经对此添加了一个答案,但我强烈建议避免使用I如何使键比较大小写不区分大小写?用于(?I)进行不区分大小写的匹配如何使键比较大小写不区分大小写?用于(?I)进行不区分大小写的匹配