Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,Regex:用字段键替换Json中的字段_Java_Regex - Fatal编程技术网

Java,Regex:用字段键替换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

要求:

对于键与指定常量匹配的每个Json字段,用另一个常量替换值

{"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)进行不区分大小写的匹配