如何将JsonElement放回JsonObject?实现嵌套JSON值替换
替换嵌套JSON指定值并回写原对象
问题场景
原始JSON:
{ "data": { "car": { "xia": [ "a0.c904.b0" ] } } }
期望修改后得到:
{ "data": { "car": { "xia": [ "a0.c234.b0" ] } } }
你已经完成了目标字符串的替换,但不清楚如何将修改后的值写回原JsonObject,以下是修正后的完整解决方案:
修正后的代码
import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; public class JsonModifyExample { public static void main(String[] args) { String inputJson = "{\n" + " \"data\": {\n" + " \"car\": {\n" + " \"xia\": [\n" + " \"a0.c904.b0\"\n" + " ]\n" + " }\n" + " }\n" + "}"; // 解析原始JSON为顶层JsonObject JsonObject rootObj = JsonParser.parseString(inputJson).getAsJsonObject(); // 逐层获取到car对象(后续要修改它的xia属性) JsonObject carObj = rootObj.getAsJsonObject("data").getAsJsonObject("car"); // 获取xia对应的JsonArray,取出数组中的目标字符串 JsonArray xiaArray = carObj.getAsJsonArray("xia"); String originalStr = xiaArray.get(0).getAsString(); // 执行字符串替换逻辑 String[] strs = originalStr.split("\\."); String replacedStr = strs[0] + "." + strs[1].replaceAll("\\d+", "234") + "." + strs[2]; // 将替换后的字符串放回数组(因JsonArray是引用类型,修改后会自动同步到原对象) xiaArray.set(0, JsonParser.parseString("\"" + replacedStr + "\"")); // 输出修改后的完整JSON System.out.println(rootObj.toString()); } }
关键注意点
xia对应的值是JsonArray而非普通字符串,不能直接调用getAsString(),需要先取数组的第一个元素- Gson中的
JsonArray和JsonObject都是引用类型,修改数组内部元素后,原JSON对象会自动同步变更,无需额外重新赋值 - 构造替换后的
JsonElement时,要给字符串包裹双引号再解析,否则会被识别为非字符串类型导致报错
内容的提问来源于stack exchange,提问作者Tiya
相关产品推荐
相关产品推荐

