跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

如何在 Java 中正确创建 JSONArray

本文详解 java 中 jsonarray 创建的常见错误及正确写法,重点解决因对象误用导致 json 元素丢失的问题,并提供可直接运行的示例代码与关键注意事项。 本文详解 java 中 js onarray 创建的常见错误及正确写法,重点解决因对象误用导致 json 元素丢失的问题,并提供可直接运行的示例代码与关键注意事项。 在 Java 中使用 org.json.JSONArray 和 org.json.JSONObject 构建嵌套 JSON 数据时,一个高频陷阱是 重复操作同一 JSONObject 实例 ,从而意外覆盖先前设置的字段值——这正是问题中 “DEMO1 消失” 的根本原因。 回顾原始代码:
JSONObject seg = new JSONObject(); seg.put("s_code", "DEMO1"); seg.put("v_type", "backend"); JSONObject obj = new JSONObject(); seg.put("s_code", "DEMO2"); // ❌ 错误:仍向 seg 写入! seg.put("v_type", "frontend"); // ❌ 错误:再次修改 seg,DEMO1 被彻底覆盖
此处 obj 虽被声明,却未被实际使用;所有 put() 操作均作用于 seg,导致 seg 最终只保留 "DEMO2" 和 "frontend",而 obj 始终为空 {}。当调用 segment.add(seg); segment.add(obj); 时,数组实际存入的是两个对象:一个是被篡改后的 seg(含 DEMO2),另一个是空 obj —— 这就解释了输出中出现 [{"s_code":"DEMO2",...}, {}] 的现象。 ✅ 正确做法是:为每个 JSON 对象分配独立实例,并对各自调用 put(): 立即学习 “ Java免费学习笔记(深入) ”; Find JSON Path Online Easily find JSON paths within JSON objects using our intuitive Json Path Finder 下载
Map payload = objectMapper.convertValue(request.getPayload(), Map.class); // 创建第一个段:DEMO1 JSONObject seg = new JSONObject(); seg.put("s_code", "DEMO1"); seg.put("v_type", "backend"); // 创建第二个段:DEMO2(必须操作 obj,而非 seg) JSONObject obj = new JSONObject(); obj.put("s_code", "DEMO2"); // ✅ 正确:向 obj 写入 obj.put("v_type", "frontend"); // ✅ 正确:向 obj 写入 // 组装 JSONArray JSONArray segments = new JSONArray(); segments.add(seg); // 添加 DEMO1 对象 segments.add(obj); // 添加 DEMO2 对象 payload.put("segments", segments);
执行后,payloadObject.getJSONArray("segments") 将返回包含两个完整对象的数组:
[ {"s_code":"DEMO1","v_type":"backend"}, {"s_code":"DEMO2","v_type":"frontend"} ]
⚠️ 关键注意事项: 勿复用 JSONObject 实例 :每个逻辑上独立的 JSON 对象都应通过 new JSONObject() 显式创建; 检查变量名与操作目标一致性 :IDE 中启用变量高亮或开启编译器警告(如 UnusedAssignment)有助于及时发现误写; 建议启用 JSON 校验 :在构建完成后,可通过 segments.toString() 打印调试,或使用 !obj.isEmpty() 判断对象是否为空; 若项目已引入 Jackson,也可考虑统一使用 ObjectMapper 配合 POJO,避免手动拼接(但本场景明确要求 JSONArray,故原生 org.json 更贴切)。 遵循以上规范,即可稳定生成结构完整、语义清晰的 JSONArray,彻底规避“元素静默丢失”类低级错误。

相关文章