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

Java Jackson如何为现有JSON添加自定义外层根节点

Jackson 包裹JSON根节点实现方案

你当前代码的核心问题有两个:

  • 多余创建了数组节点outerArray,但你期望的输出最外层是JSON对象,不是数组
  • 只构建了domande层级,没有在外层包裹anamnesi根节点

最简实现(推荐)

不需要先将数组序列化为字符串再重新解析,直接通过ObjectNode逐层构建结构即可,性能更好代码也更简洁:

ArrayList<RigaAnamnesi> vArray = fillArray();

// 构建最外层根节点
ObjectNode root = mapper.createObjectNode();
// 构建anamnesi层级节点
ObjectNode anamnesiNode = mapper.createObjectNode();
// 将数组直接绑定到domande字段
anamnesiNode.putPOJO("domande", vArray);
// 将anamnesi节点挂载到根节点
root.set("anamnesi", anamnesiNode);

// 带格式化缩进写入文件
File outputFile = Paths.get("anamnesi.json").toFile();
mapper.writerWithDefaultPrettyPrinter().writeValue(outputFile, root);

兼容原有逻辑的修改方式

如果你需要保留先转JSON字符串再解析的流程,只需要删除多余的数组创建逻辑,补充外层anamnesi节点即可:

ArrayList<RigaAnamnesi> vArray = fillArray();
String json = mapper.writeValueAsString(vArray);
JsonNode parsedJson = mapper.readTree(json);

// 删除原有outerArray相关逻辑,直接构建两层对象结构
ObjectNode root = mapper.createObjectNode();
ObjectNode anamnesiNode = mapper.createObjectNode();
anamnesiNode.set("domande", parsedJson);
root.set("anamnesi", anamnesiNode);

File outputFile = Paths.get("anamnesi.json").toFile();
mapper.writerWithDefaultPrettyPrinter().writeValue(outputFile, root);

补充说明

  • 调用writerWithDefaultPrettyPrinter()是为了输出带缩进的格式化JSON,和你给出的期望示例格式一致,如果不需要格式化直接用mapper.writeValue()即可。
  • 如果你期望输出中spiegazione字段默认值为空字符串,直接修改实体类的字段默认值:String spiegazione = "";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:09:33