当前位置:首页 > 后端开发 > 正文

java中怎么使用gson

Java中使用Gson,需先添加依赖,如Maven中 com.google.code.gsongson8.9,创建Gson实例后,用 toJson()方法将Java对象转为JSON字符串,用 fromJson()方法将JSON字符串转为Java对象

Java中使用Gson进行JSON数据的处理,主要涉及序列化和反序列化两个过程,以下是详细的步骤和示例:

添加Gson依赖

需要在项目中引入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'

基本用法

Java对象转JSON字符串(序列化)

假设我们有一个简单的Java类Person:

public class Person { private String name; private int age; private String email; // 构造函数、getter和setter方法 public Person(String name, int age, String email) { this.name = name; this.age = age; this.email = email; } public String getName() { return name; } public int getAge() { return age; } public String getEmail() { return email; } }

我们可以使用Gson的toJson()方法将Person对象转换为JSON字符串:

java中怎么使用gson 第1张

JSON字符串转Java对象(反序列化)

我们可以使用Gson的fromJson()方法将JSON字符串转换为Person对象:

import com.google.gson.Gson; public class Main { public static void main(String[] args) { String json = "{"name":"Bob","age":25,"email":"bob@example.com"}"; Gson gson = new Gson(); Person person = gson.fromJson(json, Person.class); System.out.println(person.getName()); // 输出: Bob System.out.println(person.getAge()); // 输出: 25 System.out.println(person.getEmail()); // 输出: bob@example.com } }

处理复杂对象和集合

Gson不仅可以处理简单的Java对象,还可以处理包含集合(如List、Map)的复杂对象。

嵌套对象

假设我们有一个包含Address对象的User类:

java中怎么使用gson 第2张

我们可以将User对象序列化为JSON:

import com.google.gson.Gson; public class Main { public static void main(String[] args) { User user = new User("Alice", new Address("北京", "长安街")); Gson gson = new Gson(); String json = gson.toJson(user); System.out.println(json); // 输出: {"name":"Alice","address":{"city":"北京","street":"长安街"}} } }

处理List和Map

假设我们有一个包含Person对象的列表:

import java.util.ArrayList; import java.util.List; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; public class Main { public static void main(String[] args) { List<Person> people = new ArrayList<>(); people.add(new Person("Alice", 30, "alice@example.com")); people.add(new Person("Bob", 25, "bob@example.com")); Gson gson = new Gson(); String jsonList = gson.toJson(people); System.out.println(jsonList); // 输出: [{"name":"Alice","age":30,"email":"alice@example.com"},{"name":"Bob","age":25,"email":"bob@example.com"}] // 反序列化 Type listType = new TypeToken<List<Person>>() {}.getType(); List<Person> parsedPeople = gson.fromJson(jsonList, listType); for (Person p : parsedPeople) { System.out.println(p.getName()); } } }

自定义序列化和反序列化

默认的序列化和反序列化方式可能不满足需求,你可能需要格式化日期,或者忽略某些字段,Gson提供了自定义序列化器和反序列化器的机制来实现这些需求。

处理日期格式

假设我们需要将日期格式化为yyyy-MM-dd:

java中怎么使用gson 第3张

import com.google.gson.; import java.text.SimpleDateFormat; import java.util.Date; public class DateAdapter implements JsonSerializer<Date>, JsonDeserializer<Date> { private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); @Override public JsonElement serialize(Date date, Type type, JsonSerializationContext context) { return new JsonPrimitive(format.format(date)); } @Override public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { try { return format.parse(json.getAsString()); } catch (Exception e) { throw new JsonParseException(e); } } }

我们可以使用GsonBuilder来注册这个自定义的适配器:

import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.util.Date; public class Main { public static void main(String[] args) { GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(Date.class, new DateAdapter()); Gson gson = builder.create(); Date now = new Date(); String jsonDate = gson.toJson(now); System.out.println(jsonDate); // 输出: 2025-07-15(假设当前日期是2025-07-15) Date parsedDate = gson.fromJson(jsonDate, Date.class); System.out.println(parsedDate); // 输出: Sun Jul 15 00:00:00 GMT 2025(假设当前日期是2025-07-15) } }

常用配置

美化输出

Gson gson = new GsonBuilder().setPrettyPrinting().create();

空值处理

Gson gson = new GsonBuilder().serializeNulls().create();

字段命名策略

Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();

相关问答FAQs

问题1:Gson如何处理泛型集合?

答:Gson在处理泛型集合时,需要使用TypeToken来指定集合的类型,要将JSON数组反序列化为List<Person>,可以这样做:

Type listType = new TypeToken<List<Person>>() {}.getType(); List<Person> people = gson.fromJson(jsonArray, listType);

问题2:Gson如何忽略某些字段?

答:可以使用transient关键字或@Expose注解来控制字段的序列化和反序列化。

public class Person { private String name; private int age; @Expose private String email; // 只有标记了@Expose的字段才会被处理 private transient String password; // transient字段不会被序列化和反序列化

0