Java中构建指定嵌套JSON结构的实现疑问
问题:生成含嵌套结构的指定JSON格式
需要生成的目标JSON结构:
{"id":"MESManufacturingTasksDefResp1","type":"MESManufacturingTasksDefResp","attributes":[{"name":"publisherId","type":"Text","value":"MES"},{"name":"manufacturingFacilityId","type": "Text","value": "warehouse_x"},{"name":"manufacturingTasks","type": "ManufacturingTask","value":[{"sopDefs":{"id": "sopId1","name": "sopName1","manufacturingTaskDefs": [{"id": "rod_cap_extraction","name": "rod_cap_extraction"}]}}]}]}
现有Java代码:
static ArrayList<AttDTO> attributes5 = new ArrayList<AttDTO>(); static ArrayList<String> value2 = new ArrayList<String>(); // creating fifth entity BaseDTO obj5 = new BaseDTO("MESManufacturingTasksDefResp1","MESManufacturingTasksDefResp", attributes5); attributes5.add(new AttDTO("publisherId","Text","MES")); attributes5.add(new AttDTO("manufacturingFacilityId","Text","warehouse_x")); attributes5.add(new AttDTO("manufacturingTasks","ManufacturingTask", value2 )); //value2.add(); ObjectMapper mapper5 = new ObjectMapper(); String json5 = mapper5.writeValueAsString(obj5); System.out.println("\n" + json5);
目前已成功输出manufacturingTask之前的内容,但不知道如何实现manufacturingTasks的value中包含sopDefs的嵌套结构,求实现思路。
实现思路
- 定义对应嵌套层级的实体类
你当前用ArrayList<String>存储manufacturingTasks的value,无法承载嵌套对象结构,需要针对JSON里的每个嵌套层级创建DTO类:
- 最内层的
manufacturingTaskDefs对应类:
public class ManufacturingTaskDefDTO { private String id; private String name; public ManufacturingTaskDefDTO(String id, String name) { this.id = id; this.name = name; } // 生成getter、setter方法,或用Lombok简化 }
- 中间层的
sopDefs对应类:
public class SopDefsDTO { private String id; private String name; private List<ManufacturingTaskDefDTO> manufacturingTaskDefs; public SopDefsDTO(String id, String name, List<ManufacturingTaskDefDTO> manufacturingTaskDefs) { this.id = id; this.name = name; this.manufacturingTaskDefs = manufacturingTaskDefs; } // 生成getter、setter方法 }
- 外层的
manufacturingTasks数组元素对应类:
public class ManufacturingTaskDTO { private SopDefsDTO sopDefs; public ManufacturingTaskDTO(SopDefsDTO sopDefs) { this.sopDefs = sopDefs; } // 生成getter、setter方法 }
- 逐层构建嵌套对象列表
替换原有的ArrayList<String>,改为构建嵌套对象的列表:
// 构建最内层任务定义 List<ManufacturingTaskDefDTO> taskDefList = new ArrayList<>(); taskDefList.add(new ManufacturingTaskDefDTO("rod_cap_extraction", "rod_cap_extraction")); // 构建sopDefs对象 SopDefsDTO sopDefs = new SopDefsDTO("sopId1", "sopName1", taskDefList); // 构建manufacturingTasks对应的列表 List<ManufacturingTaskDTO> manufacturingTasksList = new ArrayList<>(); manufacturingTasksList.add(new ManufacturingTaskDTO(sopDefs));
- 更新AttDTO的value参数
把原来传入value2的地方,替换为上面构建好的manufacturingTasksList:
attributes5.add(new AttDTO("manufacturingTasks","ManufacturingTask", manufacturingTasksList));
- 调整AttDTO的value字段类型
确保你的AttDTO类中value字段的类型是Object(或泛型),这样才能接收字符串、列表、嵌套对象等不同类型的值。示例修改后的AttDTO:
public class AttDTO { private String name; private String type; private Object value; public AttDTO(String name, String type, Object value) { this.name = name; this.type = type; this.value = value; } // 生成getter、setter方法 }
完成以上调整后,Jackson的ObjectMapper就能自动序列化出目标中的嵌套JSON结构。
内容的提问来源于stack exchange,提问作者V.T
相关产品推荐
相关产品推荐

