You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用org.json删除指定JSON数组时误删整个JSON对象问题

问题原因
  • 代码未执行任何删除逻辑:getJSONArray("webAutomation") 仅会读取对应数组的值,不会修改原JSON结构。
  • 跨类库混用导致序列化异常:你用org.json库构建JSONObject实例,却用Jackson的ObjectMapper做序列化。Jackson无法正确识别org.jsonJSONObject的内部数据存储结构,只会把对象自带的isEmpty() getter方法识别为empty属性序列化,最终输出{"empty":false}的异常结果。
解决方法

选择单一JSON类库完成全流程操作即可,不要跨库混用JSON对象:

方案1:全程使用org.json原生API

无需额外引入Jackson,直接用org.json自带的节点操作和序列化能力:

JSONObject jsonObject = new JSONObject(str);
// 调用remove方法删除courses节点下的webAutomation键,这是实际生效的删除逻辑
jsonObject.getJSONObject("courses").remove("webAutomation");
System.out.println("after removal");
// 调用org.json自带的toString方法,传入数字参数可指定格式化缩进的空格数
String str2 = jsonObject.toString(2);
System.out.println(str2);

运行后会保留除webAutomation数组外的所有原有JSON结构。

方案2:全程使用Jackson API

如果你本身依赖Jackson做JSON处理,就无需引入org.json,直接用Jackson的节点API操作:

ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(str);
// 拿到courses对应的ObjectNode后执行删除操作
((ObjectNode) root.get("courses")).remove("webAutomation");
System.out.println("after removal");
// 序列化输出,可开启格式化打印
String str2 = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(root);
System.out.println(str2);

内容的提问来源于stack exchange,提问作者nikhil udgirkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 03:20:04