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
相关产品推荐
相关产品推荐

