【问题标题】:Replace sub-string after and before of different sub-strings替换不同子串前后的子串
【发布时间】:2019-10-03 10:10:56
【问题描述】:

假设我需要替换下面 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"}}}

我不需要这个代码输出

我尝试过使用 matcher 和 ObjectMapper。它不工作。

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

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

【问题讨论】:

  • 到目前为止你探索了什么?请同时展示您的作品。
  • 更新实现
  • 更新实现

标签: java json string


【解决方案1】:

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

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

或者您可以对字符串执行 Json Parse 并使用 Json 函数删除/替换“名称”属性的值。

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

 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"}}}

【讨论】:

  • 有人发现答案没有帮助。可能他/她无法理解正则表达式,甚至无法尝试。用代码+输出更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 2015-03-17
  • 2015-11-09
  • 2012-04-18
  • 2022-09-28
相关资源
最近更新 更多