Java Gson 库

Java Gson 库

Java Gson 库

Java 常用类库

Gson 是 Google 提供的一个 Java 库,用于将 Java 对象转换为 JSON 表示(序列化),以及将 JSON 字符串转换为 Java 对象(反序列化)。

Gson 的主要特点包括:

简单易用的 API

无需在 Java 类中添加注解(但支持注解)

高性能

支持泛型

支持自定义序列化和反序列化

核心类:

Gson:主类,提供序列化和反序列化方法

JsonElement:JSON 元素的抽象类

JsonObject:JSON 对象表示

JsonArray:JSON 数组表示

为什么使用 Gson?

在 Java 开发中,我们经常需要在以下场景处理 JSON 数据:

与 RESTful API 交互

配置文件读写

数据持久化

不同系统间的数据交换

Gson 提供了简单高效的方式来完成这些任务,相比 Java 原生的 JSON 处理方式更加便捷。

Gson 的基本用法

添加 Gson 依赖

首先需要在项目中添加 Gson 依赖。如果你使用 Maven,可以在 pom.xml 中添加:

com.google.code.gson

gson

2.8.9

一个简单的例子,将 Java 与 JSON 对象互转:

实例

import com.google.gson.Gson;

public class GsonDemo {

public static void main(String[] args) {

Gson gson = new Gson();

// Java对象转JSON

Person person = new Person("张三", 30);

String json = gson.toJson(person);

System.out.println(json); // 输出: {"name":"张三","age":30}

// JSON转Java对象

Person parsedPerson = gson.fromJson(json, Person.class);

System.out.println(parsedPerson.getName()); // 输出: 张三

}

}

class Person {

private String name;

private int age;

// 构造方法

public Person(String name, int age) {

this.name = name;

this.age = age;

}

// getter方法 (Gson需要getter/setter)

public String getName() { return name; }

public int getAge() { return age; }

}

创建 Gson 实例

Gson gson = new Gson();

Java 对象转 JSON(序列化)

实例

class User {

private String name;

private int age;

// 构造函数、getter 和 setter 省略

}

User user = new User("张三", 25);

String json = gson.toJson(user);

// 输出: {"name":"张三","age":25}

JSON 转 Java 对象(反序列化)

实例

String json = "{\"name\":\"李四\",\"age\":30}";

User user = gson.fromJson(json, User.class);

System.out.println(user.getName()); // 输出: 李四

常用功能

集合处理

实例

// 序列化集合

List people = Arrays.asList(

new Person("王五", 28),

new Person("赵六", 32)

);

String jsonList = gson.toJson(people);

// 反序列化集合

Type listType = new TypeToken>(){}.getType();

List parsedPeople = gson.fromJson(jsonList, listType);

日期处理

实例

Gson gson = new GsonBuilder()

.setDateFormat("yyyy-MM-dd HH:mm:ss")

.create();

Date now = new Date();

String dateJson = gson.toJson(now);

Date parsedDate = gson.fromJson(dateJson, Date.class);

树模型处理

实例

String json = "{\"name\":\"李四\",\"age\":25}";

JsonElement element = JsonParser.parseString(json);

JsonObject object = element.getAsJsonObject();

String name = object.get("name").getAsString();

int age = object.get("age").getAsInt();

常用配置

美化输出

Gson gson = new GsonBuilder()

.setPrettyPrinting()

.create();

空值处理

Gson gson = new GsonBuilder()

.serializeNulls() // 序列化null值

.create();

字段命名策略

Gson gson = new GsonBuilder()

.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)

.create();

// 会将userName转换为user_name

Gson 的高级特性

处理复杂对象

Gson 可以处理包含嵌套对象、数组、集合等复杂数据结构:

实例

class Order {

private String orderId;

private List products;

// 省略其他代码

}

Order order = new Order("123", Arrays.asList(

new Product("手机", 1, 2999.00),

new Product("耳机", 2, 199.00)

));

String json = gson.toJson(order);

使用 TypeToken 处理泛型

当需要处理泛型集合时,可以使用 TypeToken:

实例

String json = "[{\"name\":\"苹果\",\"price\":5.5},{\"name\":\"香蕉\",\"price\":3.2}]";

Type productListType = new TypeToken>(){}.getType();

List products = gson.fromJson(json, productListType);

自定义序列化和反序列化

你可以通过实现 JsonSerializer 和 JsonDeserializer 接口来自定义处理逻辑:

实例

public class DateSerializer implements JsonSerializer {

private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

@Override

public JsonElement serialize(Date date, Type type, JsonSerializationContext context) {

return new JsonPrimitive(format.format(date));

}

}

// 使用自定义序列化器

Gson gson = new GsonBuilder()

.registerTypeAdapter(Date.class, new DateSerializer())

.create();

使用注解

Gson 提供了一些有用的注解:

实例

class User {

@SerializedName("user_name") // JSON 字段名

private String name;

@Expose(serialize = false) // 不参与序列化

private String password;

@Since(1.0) // 版本控制

private String email;

}

GsonBuilder 配置

GsonBuilder 提供了多种配置选项:

实例

Gson gson = new GsonBuilder()

.setPrettyPrinting() // 美化输出

.serializeNulls() // 序列化 null 值

.setDateFormat("yyyy-MM-dd") // 日期格式

.disableHtmlEscaping() // 禁用 HTML 转义

.create();

性能考虑

重用 Gson 实例:Gson 是线程安全的,建议重用而不是频繁创建

对于大量数据处理,考虑使用流式 API(JsonReader/JsonWriter)

复杂对象结构会影响性能

Gson 与其他 JSON 库的比较

特性

Gson

Jackson

org.json

易用性

性能

功能完整性

非常高

社区支持

非常高

总结

Gson 是一个强大而简单的 JSON 处理库,适合大多数 Java 项目。它提供了:

简单的 API 设计

灵活的配置选项

良好的性能

丰富的功能

对于简单的 JSON 处理需求,Gson 通常是 Java 开发者的首选。对于高性能需求或复杂场景,可以考虑 Jackson 等其他库。

Java 常用类库

相关推荐

【原】失心:怣,不读shī,也不读​xīn,你知道怎么读吗?“怣”是什么意思?
[流言板]球迷发推称若列维解雇澳波罗梅罗大概会走,罗梅罗亲自转发
大鲸直播平台安卓版 v1.0.2 官方版
3654687

大鲸直播平台安卓版 v1.0.2 官方版

📅 09-04 👁️ 448
python里读写excel等数据文件的6种常用方式
365bet娱乐网站

python里读写excel等数据文件的6种常用方式

📅 07-30 👁️ 2878