用java中的另一个字符串替换JSON字符串

时间:2018-06-19 07:20:23

标签: java json

String str = "{"id":"4ebd7e4f","start_page_ui_id":"","business_unit":["5b65aced"],"props":{"metadata":"[]","postsPerPage":"20","network_id":"1b375ffd"},"render_engine":"twig"}"

这里我要替换"元数据":" []"到"元数据":" ["键":"值,值1","键1":"值2&# 34;]"

为此我试图替换为

str =str.replace("\"metadata\":\"[\"", "\"metadata\": \"[{\"key\":\"key\",\"val\":\"value,value1\"},{\"key\":\"key1\",\"val\":\"value2\"}");

但它没有被取代。我不明白为什么? 任何人都可以帮我解决这个问题。

我想替换另一个字符串" postsPerPage":" 20" to" postsPerPage":" 6"

为此我尝试了

str = str .replace("\"postsPerPage\": \"20\",", "\"postsPerPage\": \"9\",");

这里的价值也没有改变。

4 个答案:

答案 0 :(得分:1)

为此使用JSON第三方库,GSONJackson是最受欢迎的。

例如使用GSON(仅适用于小样本!对于大型JSON blob,您应该考虑使用流API):

A - 2017/01

控制台输出:

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

public class Main {

    public static void main(String[] args) {
        Gson gson = new Gson();
        String str = "{\"id\":\"4ebd7e4f\",\"start_page_ui_id\":\"\",\"business_unit\":[\"5b65aced\"],\"props\":{\"metadata\":\"[]\",\"postsPerPage\":\"20\",\"network_id\":\"1b375ffd\"},\"render_engine\":\"twig\"}";
        String metadataReplacementJson = "[{\"key\":\"key\",\"val\":\"value,value1\"},{\"key\":\"key1\",\"val\":\"value2\"}]";
        JsonObject jsonObject = gson.fromJson(str, JsonObject.class);

        jsonObject
                .get("props")
                .getAsJsonObject()
                .remove("metadata");

        jsonObject
                .get("props")
                .getAsJsonObject()
                .add("metadata", gson.fromJson(metadataReplacementJson, JsonArray.class));

        System.out.println(gson.toJson(jsonObject));
    }
}

答案 1 :(得分:0)

这是一个漫长的过程,我将在此概述您需要做什么才能编写JSON。

  • 为您的JSON创建POJO。
  • 解析您的JSON并创建一个POJO对象。
  • 现在用新数据操作POJO对象(更新值,替换等等。)
  • 回写新鲜的JSON。

图书馆:GSON,杰克逊在这里有所帮助。您还可以使用在线JSON到POJO转换器,使您的任务更加轻松。

答案 2 :(得分:0)

您必须替换为

"\"metadata\":\"[" 

"\"metadata\":\"[\""

"\"postsPerPage\": \"20\","

应该是

"\"postsPerPage\":\"20\""

答案 3 :(得分:0)

  

字符串对象是不可变的,因此无论何时我们在   当时创建的新字符串对象。   新的Stirng对象未分配给任何String对象。

so str = str .replace(“ \” postsPerPage \“:\” 20 \“,”,“ \” postsPerPage \“:\” 9 \“,”);

在上面创建的新对象行中,它自动符合垃圾收集的条件。

  

字符串str2 = str .replace(“ \” postsPerPage \“:\” 20 \“,”,   “ \” postsPerPage \“:\” 9 \“,”);

此处创建了新的String对象。 str2指向String对象。

现在您可以使用str2了。