如何解析嵌套JSON并替换指定值?Gson实现及工具选择疑问
JSON修改方案对比与Gson完整实现步骤
方案对比
- 正则方案:不推荐。复杂嵌套JSON的结构多变,正则无法精准定位目标节点,极易因空格、换行等格式差异匹配失败,甚至误改其他相似结构的内容,稳定性极差。
- Freemarker:不适合这类场景。它主打模板化生成JSON,若仅修改已有JSON的特定节点,需先将JSON转成模板数据、修改后再渲染,步骤繁琐冗余,绝非最优选择。
- Gson:是该场景的最优方案之一。它专为Java对象与JSON的互转设计,能精准定位嵌套节点,修改后可直接重新序列化生成JSON,逻辑清晰且稳定。
Gson完整实现步骤(Java示例)
方式1:通过实体类操作(推荐,结构清晰易维护)
先根据JSON结构定义对应的实体类:
// 顶层JSON实体 class Root { private Data data; // 自动生成getter、setter方法 } class Data { private Os0 os0; // 自动生成getter、setter方法 } class Os0 { @SerializedName("TD ex") // 适配带空格的键名 private List<String> tdEx; // 自动生成getter、setter方法 }
然后执行解析、修改、重新序列化:
// 1. 解析原始JSON到实体类 Gson gson = new Gson(); String originalJson = "你的原始JSON字符串"; Root root = gson.fromJson(originalJson, Root.class); // 2. 修改目标节点数组值 root.getData().getOs0().setTdEx(Arrays.asList("a0.c995.c0")); // 3. 重新生成修改后的JSON String modifiedJson = gson.toJson(root);
方式2:动态操作JsonObject(无需定义实体类)
如果不想提前定义实体类,可直接解析为JsonObject进行动态修改:
Gson gson = new Gson(); // 1. 解析原始JSON为JsonElement JsonElement jsonElement = JsonParser.parseString(originalJson); JsonObject rootObj = jsonElement.getAsJsonObject(); // 2. 逐层定位目标节点并修改 JsonObject dataObj = rootObj.getAsJsonObject("data"); JsonObject os0Obj = dataObj.getAsJsonObject("os0"); // 创建新的目标数组 JsonArray newTdExArray = new JsonArray(); newTdExArray.add("a0.c995.c0"); // 替换原数组 os0Obj.add("TD ex", newTdExArray); // 3. 重新生成JSON字符串 String modifiedJson = gson.toJson(rootObj);
内容的提问来源于stack exchange,提问作者Tiya
相关产品推荐
相关产品推荐

