在不同子字符串之前和之后替换子字符串

时间:2019-10-03 10:10:56

标签: java json string

假设我需要替换下面的Json对象中“ name”的所有值。

    String srt = "{\"name\":\"Jon\",\"calls\":[{\"name\":\"Jons\", \"number\":\"00000000\"}],\"missed\":{\"point\":{\"name\":\"Sara\"}}}";

str.replace("name", "Kiki");

输出:

{"Kiki":"Jon","calls":[{"Kiki":"Jons", "number":"00000000"}],"missed":{"point":{"Kiki":"Sara"}}}

不需要此代码输出

我尝试使用匹配器和ObjectMapper。它不起作用。

用“ Kiki”替换名称后,对象应该是

    {"name":"Kiki","calls":[{"name":"Kiki", "number":"00000000"}],"missed":{"point":{"name":"Kiki"}}}

1 个答案:

答案 0 :(得分:-1)

您可以使用以下正则表达式替换

    str = str.replaceAll("name\":\\s*\"[^\"]+?([^\\/\"]+)", "name\":\"Kiki");

或者您可以对字符串进行Json解析,并使用Json函数删除/替换'name'属性的值。

使用正则表达式的解决方案(完整):

 public static void main(String[] args) {
        String str = "{\"name\":\"Jon\",\"calls\":[{\"name\":\"Jons\", \"number\":\"00000000\"}],\"missed\":{\"point\":{\"name\":\"Sara\"}}}";
        System.out.println("Input: " + str);
        str = str.replaceAll("name\":\\s*\"[^\"]+?([^\\/\"]+)", "name\":\"Kiki");
        System.out.println("Output: " + str);
    }

输出

Input: {"name":"Jon","calls":[{"name":"Jons", "number":"00000000"}],"missed":{"point":{"name":"Sara"}}}
Output: {"name":"Kiki","calls":[{"name":"Kiki", "number":"00000000"}],"missed":{"point":{"name":"Kiki"}}}