有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用正则表达式替换json值

String inputJson = "{\r\n" + 
            "  \"fullName\" : \"Hamo\",\r\n" + 
            "  \"staff\" : false,\r\n" + 
            "  \"supr\" : true,\r\n" + 
            "  \"permissions\" : [ \"Perm1\", \"Perm2\" ],\r\n" + 
            "  \"services\" : [ \"Serv1\", \"Serv2\" ],\r\n" + 
            "  \"authToken\" : \"1234567890abcdefghaijklmnopqrstuvwxyz\",\r\n" + 
            "  \"customerId\" : 12345,\r\n" + 
            "  \"clients\" : [ 1, 3, 8 ],\r\n" + 
            "  \"wts\" : false,\r\n" + 
            //yyyy-MM-dd
            "  \"testDate\" : \"1982-09-21\"\r\n" + 
            "}";

我需要用另一个使用正则表达式的字符串替换authToken值。 此问题已被编辑,因为未正确提问


共 (2) 个答案

  1. # 1 楼答案

    没有JSON类,仍然存在:

    inputJson = inputJson.replaceFirst("(\"authToken\"\\s*:\\s*\")[^\"]*\"",
        "$1" + authToken + "\"");
    

    这假设authToken不包含美元$

  2. # 2 楼答案

    除了使用方便的json编辑库,还可以使用regexp:

    String inputJson = "{\r\n" +
            "  \"fullName\" : \"Hamo\",\r\n" +
            "  \"staff\" : false,\r\n" +
            "  \"supr\" : true,\r\n" +
            "  \"permissions\" : [ \"Perm1\", \"Perm2\" ],\r\n" +
            "  \"services\" : [ \"Serv1\", \"Serv2\" ],\r\n" +
            "  \"authToken\" : \"1234567890abcdefghaijklmnopqrstuvwxyz\",\r\n" +
            "  \"customerId\" : 12345,\r\n" +
            "  \"clients\" : [ 1, 3, 8 ],\r\n" +
            "  \"wts\" : false,\r\n" +
            //yyyy-MM-dd
            "  \"testDate\" : \"1982-09-21\"\r\n" +
            "}";
    
    String desiredAuthToken = "anyAuthTokenYouWant";
    inputJson.replaceAll("(\"authToken\"\\s*:\\s*\")\\w*", "$1" + desiredAuthToken);
    

    解释如下:

    "(\"authToken\"\\s*:\\s*\")\\w*";
     (                              – start of a first capturing group
      \"authToken\"                 – matches "authToken" string
                   \\s*             – 0 to N whitespaces (including normal spaces, tabulations, etc.)
                       :            – matches a single colon
                        \\s*        – 0 to N whitespaces again
                            )       – end of the capturing group
                             \\w*   – matches 0 to N alphanumeric characters. You may want to replace it with a different regexp, that suits you needs in a better way.
    

    最后,将整个匹配表达式替换为"$1" + desiredAuthToken,其中$1基本上是第一个捕获组的内容。(在这种情况下是\"authToken\" : \"