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\",");
这里的价值也没有改变。
答案 0 :(得分:1)
为此使用JSON第三方库,GSON或Jackson是最受欢迎的。
例如使用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。
图书馆: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了。