如何将JSON String转换为对象的ArrayList?
将JSON数组转换为Java对象ArrayList的方法
嘿,我来帮你搞定这个JSON转ArrayList的问题!你拿到的是一个包含多个对象的JSON数组,要转成Java的ArrayList<YourObject>其实很简单,下面分步骤给你讲清楚:
首先先确认下你拿到的JSON内容:
[ { "id":15, "title":"1", "description":"desc", "user_id":152 }, { "id":18, "title":"2", "description":"desc", "user_id":152 }, { "id":19, "title":"tab3", "description":"zadanka", "user_id":152 } ]
第一步:创建对应的实体类
首先你需要定义一个和JSON字段匹配的Java类,比如叫Task(名字可以自己取),字段要和JSON里的键对应上,还要注意构造函数和getter/setter:
public class Task { private int id; private String title; private String description; // 如果你的变量名想改成userId,就加@JsonProperty("user_id")(Jackson)或者@SerializedName("user_id")(Gson) private int user_id; // 必须要有无参构造函数,不然解析库无法实例化对象 public Task() {} // 生成getter和setter方法,也可以用Lombok的@Data注解来简化代码 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public int getUser_id() { return user_id; } public void setUser_id(int user_id) { this.user_id = user_id; } }
第二步:用Jackson库解析(Spring常用)
Jackson是Java生态里最常用的JSON解析库之一,如果你用Spring的话,大概率已经引入了这个库。
先引入依赖(Maven)
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> <!-- 建议用最新稳定版 --> </dependency>
解析代码
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.ArrayList; public class JsonToArrayList { public static void main(String[] args) { String jsonStr = "[ { \"id\":15, \"title\":\"1\", \"description\":\"desc\", \"user_id\":152 }, { \"id\":18, \"title\":\"2\", \"description\":\"desc\", \"user_id\":152 }, { \"id\":19, \"title\":\"tab3\", \"description\":\"zadanka\", \"user_id\":152 } ]"; ObjectMapper objectMapper = new ObjectMapper(); try { // 用TypeReference来指定泛型类型,避免类型擦除问题 ArrayList<Task> taskList = objectMapper.readValue(jsonStr, new TypeReference<ArrayList<Task>>() {}); // 测试输出,验证转换结果 for (Task task : taskList) { System.out.println("任务ID:" + task.getId() + ",标题:" + task.getTitle()); } } catch (Exception e) { // 处理解析异常,比如JSON格式错误、字段不匹配等 e.printStackTrace(); } } }
第三步:用Gson库解析(Google出品)
如果你更习惯用Google的Gson库,也可以这么做:
引入依赖(Maven)
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> <!-- 最新稳定版 --> </dependency>
解析代码
import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.util.ArrayList; public class GsonToArrayList { public static void main(String[] args) { String jsonStr = "[ { \"id\":15, \"title\":\"1\", \"description\":\"desc\", \"user_id\":152 }, { \"id\":18, \"title\":\"2\", \"description\":\"desc\", \"user_id\":152 }, { \"id\":19, \"title\":\"tab3\", \"description\":\"zadanka\", \"user_id\":152 } ]"; Gson gson = new Gson(); // 用TypeToken来获取泛型类型,解决类型擦除问题 ArrayList<Task> taskList = gson.fromJson(jsonStr, new TypeToken<ArrayList<Task>>(){}.getType()); // 测试输出 for (Task task : taskList) { System.out.println("任务ID:" + task.getId() + ",标题:" + task.getTitle()); } } }
几个关键注意点
- 必须要有无参构造函数:解析库需要通过无参构造来创建对象,不然会抛出异常
- 字段名匹配:如果JSON里的字段名(比如
user_id)和Java变量名不一样,记得用注解映射 - 异常处理:解析过程中可能会出现JSON格式错误、字段类型不匹配等问题,一定要捕获异常并处理
内容的提问来源于stack exchange,提问作者user9351774
相关产品推荐
相关产品推荐

