如何在Java中反序列化含users与pokemon数组的JSON(优先Gson)
用Gson将目标JSON反序列化为Java对象
步骤1:添加Gson依赖
如果使用Maven,在pom.xml中加入以下依赖:
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> <!-- 使用最新稳定版 --> </dependency>
Gradle用户则在build.gradle中添加:
implementation 'com.google.code.gson:gson:2.10.1'
步骤2:定义对应Java实体类
需要创建三个类映射JSON结构,字段名与JSON键严格对应(也可通过@SerializedName自定义映射关系):
顶层容器类(PokemonAppData)
import java.util.List; public class PokemonAppData { private List<User> users; private List<Pokemon> pokemon; // 生成getter、setter方法 public List<User> getUsers() { return users; } public void setUsers(List<User> users) { this.users = users; } public List<Pokemon> getPokemon() { return pokemon; } public void setPokemon(List<Pokemon> pokemon) { this.pokemon = pokemon; } }
User类
public class User { private int id; private String name; private String email; // 生成getter、setter方法 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
Pokemon类
public class Pokemon { private int userId; private String name; private String frontImg; private String backImg; private String type; private int hp; private int id; // 生成getter、setter方法 public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getFrontImg() { return frontImg; } public void setFrontImg(String frontImg) { this.frontImg = frontImg; } public String getBackImg() { return backImg; } public void setBackImg(String backImg) { this.backImg = backImg; } public String getType() { return type; } public void setType(String type) { this.type = type; } public int getHp() { return hp; } public void setHp(int hp) { this.hp = hp; } public int getId() { return id; } public void setId(int id) { this.id = id; } }
步骤3:执行反序列化操作
将JSON字符串转换为PokemonAppData对象,示例代码如下:
import com.google.gson.Gson; public class DeserializeDemo { public static void main(String[] args) { // 目标JSON字符串(注意转义双引号) String json = "{\"users\":[{\"id\":1,\"name\":\"Ash\",\"email\":\"ashketchum@kanto.com\"},{\"id\":2,\"name\":\"Gary\",\"email\":\"garyoak@kanto.com\"}],\"pokemon\":[{\"userId\":1,\"name\":\"Ember\",\"frontImg\":\"/images/pokemon/local-mon/ember/front.png\",\"backImg\":\"/images/pokemon/local-mon/ember/back.png\",\"type\":\"fire\",\"hp\":100,\"id\":1},{\"userId\":1,\"name\":\"Draggy\",\"frontImg\":\"/images/pokemon/local-mon/dragon/front.png\",\"backImg\":\"/images/pokemon/local-mon/dragon/back.png\",\"type\":\"dragon\",\"hp\":100,\"id\":2}]}"; // 初始化Gson实例 Gson gson = new Gson(); // 反序列化 PokemonAppData data = gson.fromJson(json, PokemonAppData.class); // 验证结果 System.out.println("用户列表:"); for (User user : data.getUsers()) { System.out.println(user.getId() + " - " + user.getName()); } System.out.println("\n宝可梦列表:"); for (Pokemon p : data.getPokemon()) { System.out.println(p.getId() + " - " + p.getName() + "(属性:" + p.getType() + ")"); } } }
补充:使用Jackson库的实现(可选)
如果选择Jackson库,先添加依赖:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency>
反序列化代码示例:
import com.fasterxml.jackson.databind.ObjectMapper; public class JacksonDeserializeDemo { public static void main(String[] args) throws Exception { String json = "你的目标JSON字符串"; ObjectMapper objectMapper = new ObjectMapper(); PokemonAppData data = objectMapper.readValue(json, PokemonAppData.class); // 后续验证操作同Gson示例 } }
内容的提问来源于stack exchange,提问作者Jae
相关产品推荐
相关产品推荐

