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

如何使用Jackson将JSON中的字符串形式数组反序列化为List<User>?

问题原因

原JSON中users字段的值是字符串格式的JSON数组(被双引号包裹,内部含转义字符),但Java实体类Group的users属性是List<User>类型,Jackson默认无法将字符串直接转换为集合对象,导致反序列化失败。

解决方法

方法一:自定义Jackson反序列化器

通过自定义反序列化逻辑,把users字段的字符串内容解析为List<User>:

  1. 编写自定义反序列化器:
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.List;

public class StringToListDeserializer extends JsonDeserializer<List<User>> {
    private final ObjectMapper objectMapper = new ObjectMapper();

    @Override
    public List<User> deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        // 获取users字段的字符串值
        String jsonStr = p.getText();
        // 将字符串解析为List<User>
        return objectMapper.readValue(jsonStr, ctxt.getTypeFactory().constructCollectionType(List.class, User.class));
    }
}
  1. 在Group类的users字段上添加注解,指定使用该反序列化器:
static class Group {
    private String name;
    // 指定自定义反序列化器
    @JsonDeserialize(using = StringToListDeserializer.class)
    private List<User> users;

    // 省略getter、setter、构造方法
}
  1. 正常执行原反序列化代码即可:
ObjectMapper objectMapper = new ObjectMapper();
Group group = objectMapper.readValue(s, Group.class);

方法二:通过中间对象中转

先将JSON反序列化为临时对象(把users字段定义为String类型),再手动解析字符串为List<User>:

  1. 定义中间类:
static class TempGroup {
    private String name;
    private String users;

    // 省略getter、setter
}
  1. 分步完成反序列化与转换:
ObjectMapper objectMapper = new ObjectMapper();
// 先转成临时对象
TempGroup tempGroup = objectMapper.readValue(s, TempGroup.class);
// 解析users字符串为List<User>
List<User> userList = objectMapper.readValue(tempGroup.getUsers(), 
    objectMapper.getTypeFactory().constructCollectionType(List.class, User.class));
// 构建最终的Group对象
Group group = new Group();
group.setName(tempGroup.getName());
group.setUsers(userList);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:35:20