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

使用Jackson将JSON数据读取到数组/列表时遇到问题

解决Jackson反序列化JSON时的构造函数参数不匹配问题

老哥,我瞅了下你的问题,大概率是Jackson反序列化的时候踩了构造函数参数和JSON字段不匹配的坑!咱们一步步捋清楚:

问题根源

你的JSON数据里每个对象只有atcID字段:

[ { "atcID": "AL011851" }, { "atcID": "AL021851" } ]

但你的StormData构造函数要求两个参数:atcID和name,而且你大概率没给构造函数参数加@JsonProperty注解——Jackson既找不到name字段的值,又没法把JSON里的atcID和构造函数参数对应起来,自然就报错了。

针对性解决方案

根据你的需求,分两种情况处理:

情况1:name是可选字段(允许为null)

给构造函数的参数加上@JsonProperty明确映射关系,同时给name参数留默认值,或者重载一个只接收atcID的构造函数:

public class StormData {
    private String atcID;
    private String name;

    // 方案A:带可选参数的构造函数,加@JsonProperty映射
    @JsonCreator
    public StormData(@JsonProperty("atcID") String atcID, 
                    @JsonProperty("name") String name) {
        this.atcID = atcID;
        this.name = name; // JSON里没有name的话,这里会是null
    }

    // 方案B:重载只需要atcID的构造函数,更直观
    @JsonCreator
    public StormData(@JsonProperty("atcID") String atcID) {
        this.atcID = atcID;
        this.name = ""; // 或者设为null,根据你的需求来
    }

    // 别忘了加getter(如果需要序列化或者外部访问字段的话)
    public String getAtcID() { return atcID; }
    public String getName() { return name; }
}

情况2:name是必填字段

那你得修改JSON数据,给每个对象补充name字段:

[ 
  { "atcID": "AL011851", "name": "飓风卡特里娜" }, 
  { "atcID": "AL021851", "name": "飓风桑迪" } 
]

同时构造函数的参数依然要加@JsonProperty注解,确保字段映射正确。

测试验证

用ObjectMapper测试反序列化:

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;

public class Test {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        String json = "[ { \"atcID\": \"AL011851\" }, { \"atcID\": \"AL021851\" } ]";
        List<StormData> stormList = mapper.readValue(json, new TypeReference<List<StormData>>() {});
        
        // 打印结果验证
        stormList.forEach(storm -> 
            System.out.printf("atcID: %s, name: %s%n", storm.getAtcID(), storm.getName())
        );
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:28:22