news 2026/10/31 5:35:39

android使用GSON保存数据替代自己开发原生代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
android使用GSON保存数据替代自己开发原生代码

如果自己开发,主要是后期维护可能出问题,因为其实可能自己开发的代码类型没有GSON多,而且可能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 中添加:

<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>

一个简单的例子,将 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<Person> people = Arrays.asList(
new Person("王五", 28),
new Person("赵六", 32)
);
String jsonList = gson.toJson(people);

// 反序列化集合
Type listType = new TypeToken<List<Person>>(){}.getType();
List<Person> 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<Product> 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<List<Product>>(){}.getType();
List<Product> products = gson.fromJson(json, productListType);

自定义序列化和反序列化

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

实例

public class DateSerializer implements JsonSerializer<Date> {
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 库的比较

特性GsonJacksonorg.json
易用性高中高
性能中高低
功能完整性高非常高低
社区支持高非常高中

总结

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

  • 简单的 API 设计
  • 灵活的配置选项
  • 良好的性能
  • 丰富的功能

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 16:01:59

3.8二刷基础54、57、完成进阶28、29

题目&#xff1a;一个等差数列是一个能表示成a, ab, a2b,..., anb (n0,1,2,3,...) 在这个问题中a是一个非负的整数&#xff0c;b是正整数。写一个程序来找出在双平方数集合S中长度为n的等差数列。双平方数集合是所有能表示成p2&#xff0b;q2的数的集合。要点总结&#xff1a;将…

作者头像 李华
网站建设 2026/10/15 20:18:22

导师严选 8个AI论文平台:本科生毕业论文写作全测评

在当前学术写作日益依赖AI工具的背景下&#xff0c;本科生在毕业论文写作过程中面临着选题构思、文献综述、结构搭建、语言润色等多重挑战。面对市场上琳琅满目的AI论文平台&#xff0c;如何选择真正高效、实用且符合学术规范的工具成为关键难题。为此&#xff0c;我们基于2026…

作者头像 李华
网站建设 2026/10/20 17:44:28

2005-2025年 我国乡镇级的逐日地表气压数据(Shp/Excel格式)

之前我们分享了2005-2025年我国逐日地表气压栅格数据&#xff01;该数据来源于Climate Data Store&#xff08;CDS&#xff09;中的ERA5-Land再分析数据集。数据空间分辨率为0.1*0.1&#xff08;约1万米&#xff09;。ERA5-Land再分析数据集包括世界时&#xff08;UTC&#xff…

作者头像 李华
网站建设 2026/10/14 21:39:46

第五篇:Excel数据输入技巧|告别手动重复,1分钟填满表格

前言作为职场人&#xff0c;每天和Excel打交道&#xff0c;最耗时的环节莫过于「重复数据输入」——同一列反复输入部门名称、手动添加单位、逐个输入日期&#xff0c;明明1分钟能搞定的事&#xff0c;却要折腾半小时&#xff0c;白白浪费时间、熬到加班。本文聚焦Excel「数据输…

作者头像 李华
网站建设 2026/10/14 12:00:12

【声呐技术】窄带干扰抑制技术:一项综述

本文翻译自论文 Narrowband Interference Mitigation Techniques: A Survey 如有侵权,请联系本人删除 目录 摘要 I. 引言 A. 现有文献中的综述 B. 本文贡献 II. 窄带干扰定义及模型 A. NBI 与人为干扰 (Jamming) 的比较 B. 单音和多音 NBI 模型 C. 高斯 NBI 模型…

作者头像 李华