Замените значение json на регулярное выражение - PullRequest
0 голосов
/ 20 января 2020
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 ]

2 голосов
/ 20 января 2020

Без класса JSON остается:

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

Это предполагает, что authToken не содержит доллар $.

1 голос
/ 20 января 2020

Помимо использования удобных библиотек редактирования 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\" : \" в данном случае).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...