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

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的嵌套结构,求实现思路。


实现思路
  1. 定义对应嵌套层级的实体类
    你当前用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方法
}
  1. 逐层构建嵌套对象列表
    替换原有的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));
  1. 更新AttDTO的value参数
    把原来传入value2的地方,替换为上面构建好的manufacturingTasksList:
attributes5.add(new AttDTO("manufacturingTasks","ManufacturingTask", manufacturingTasksList));
  1. 调整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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:45:39