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

使用Jackson从含数组的JSON对象提取id与attributes映射

问题解决:Jackson反序列化嵌套JSON结构报错

错误原因

你的JSON根结构是一个对象(外层为{}),真正的求职者数组在data字段中,但你直接将整个JSON反序列化成ArrayList<JobSeeker>,Jackson预期读取数组开头的[,实际却读到对象开头的{,因此抛出类型不匹配的异常。

解决方案

方案1:创建外层响应包装类

定义一个对应整个JSON结构的包装类,通过它提取data数组:

// 外层响应类
public class JobSeekerResponse {
    private List<JobSeeker> data;

    // getter和setter
    public List<JobSeeker> getData() {
        return data;
    }
    public void setData(List<JobSeeker> data) {
        this.data = data;
    }
}

// 求职者实体类(仅保留需要的字段)
public class JobSeeker {
    private String id;
    private Map<String, Object> attributes; // 若attributes结构固定,可替换为对应实体类

    // getter和setter
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public Map<String, Object> getAttributes() {
        return attributes;
    }
    public void setAttributes(Map<String, Object> attributes) {
        this.attributes = attributes;
    }

    // 可选:重写toString方便打印结果
    @Override
    public String toString() {
        return "JobSeeker{id='" + id + "', attributes=" + attributes + '}';
    }
}

修改反序列化代码:

ObjectMapper objectMapper = new ObjectMapper();
JobSeekerResponse response = objectMapper.readValue(EntityUtils.toString(entity), JobSeekerResponse.class);
List<JobSeeker> myObjects = response.getData();
for (JobSeeker itr : myObjects) {
    System.out.println(itr);
}

方案2:直接操作JSON节点(无需额外类)

如果不想创建包装类,可以通过Jackson的JsonNode直接提取目标数组:

ObjectMapper objectMapper = new ObjectMapper();
// 先读取整个JSON为节点
JsonNode rootNode = objectMapper.readTree(EntityUtils.toString(entity));
// 获取data字段对应的数组节点
JsonNode dataNode = rootNode.get("data");
// 将数组节点转换为List<JobSeeker>
List<JobSeeker> myObjects = objectMapper.convertValue(dataNode, new TypeReference<List<JobSeeker>>(){});
for (JobSeeker itr : myObjects) {
    System.out.println(itr);
}

注意事项

  • 确保JobSeeker类的字段名与JSON中的id、attributes完全匹配,或通过@JsonProperty注解指定映射关系(若字段名不一致)。
  • Jackson默认会忽略JSON中未在实体类定义的字段(如type、relationships),无需额外配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:35:27