在java中将JSON字符串替换为另一个字符串

gt0wga4j  于 4个月前  发布在  Java
关注(0)|答案(5)|浏览(73)
String str = "{"id":"4ebd7e4f","start_page_ui_id":"","business_unit":["5b65aced"],"props":{"metadata":"[]","postsPerPage":"20","network_id":"1b375ffd"},"render_engine":"twig"}"

字符串
这里我想将“metadata”:“[]”替换为“metadata”:“[“key”:“value,value1”,“key1”:“value2”]”
为此,我试图取代作为

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


但是它没有被替换。我不明白为什么??谁能帮我解决这个问题。
我想将另一个字符串“postsPerPage”:“20”替换为“postsPerPage”:“6”
为此,我尝试了

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


这里的值也没有改变。

qlfbtfca

qlfbtfca1#

使用JSON第三方库,GSONJackson是最流行的。
以GSON为例(仅适用于小样本!对于JSON的大blob,您应该考虑使用流API):

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));
    }
}

字符串
控制台输出:

{"id":"4ebd7e4f","start_page_ui_id":"","business_unit":["5b65aced"],"props":{"metadata":[{"key":"key","val":"value,value1"},{"key":"key1","val":"value2"}],"postsPerPage":"20","network_id":"1b375ffd"},"render_engine":"twig"}

nle07wnf

nle07wnf2#

这是一个相当漫长的过程,我将在这里概述你需要做些什么来制作你的JSON。

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

库:GSON,Jackson在这里有帮助。你也可以使用在线JSON到POJO转换器来使你的任务更容易。

wfypjpf4

wfypjpf43#

你必须用

"\"metadata\":\"["

字符串

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


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


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

e4yzc0pl

e4yzc0pl4#

String对象是不可变的,所以每当我们在现有的String对象中执行任何操作时,都会创建一个新的String对象。新的Stirng对象不会分配给任何String对象。

所以str = str .replace(“\“postsPerPage":\“20",",“\“postsPerPage":\“9",”);
在上面一行创建的新对象中,它自动符合垃圾收集的条件。
String str2 = str .replace(“\“postsPerPage":\“20",",“\“postsPerPage":\“9",”);
这里创建了新String对象。str 2指向String对象。
现在你可以使用str 2来工作。

dwthyt8l

dwthyt8l5#

对于那些仍然感兴趣的人,java 21引入了STR模板

STR."Invalid order quantity : \{qty}";

字符串


的数据

相关问题