Gson

目前的客户端大都有和服务端进行交互,而数据的格式基本就是json了,于是在Android开发中就经常用到json解析,方便的是Google已经为我们提供了一个很棒的json解析库–gson,那么今天就来总结分享下gson的各种用法。

gson的官方下载地址:google-gson

单个对象

首先我们来看一个最简单的用法,假设json的数据格式是这样的:

{
    "id": 100,
    "body": "It is my post",
    "number": 0.13,
    "created_at": "2014-05-22 19:12:38"
}

那么我们只需要定义对应的一个类:

public class Foo {
    public int id;
    public String body;
    public float number;
    public String created_at;
}

使用起来只需如下几行代码就行了:

public static final String JSON_DATA = "...";
Foo foo = new Gson().fromJson(JSON_DATA, Foo.class);

这里是最简单的用法,created_at直接定义了String类型,如果你想要Date类型的也可以,就变成下面的例子:

public class Foo {
    public int id;
    public String body;
    public float number;
    public Date created_at;
}

public static final String JSON_DATA = "...";
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setDateFormat("yyyy-MM-dd HH:mm:ss");
Gson gson = gsonBuilder.create();
Foo foo = gson.fromJson(JSON_DATA, Foo.class);

有人说created_at不是java风格,java编程规范是驼峰结构,那么ok,Gson很人性化的也提供注解的方式,只需要把Foo对象改成这样就ok了:

public class Foo {
    public int id;
    public String body;
    public float number;

    @SerializedName("created_at")
    public String createdAt;
}

然后用法不变,是不是很方便。

对象的嵌套

假设要返回如下数据:

{
    "id": 100,
    "body": "It is my post",
    "number": 0.13,
    "created_at": "2014-05-22 19:12:38"
    "foo2": {
        "id": 200,
        "name": "haha"
    }
}

那么对象的定义是这样的

public class Foo {
    public int id;
    public String body;
    public float number;
    public String created_at;
    public ChildFoo foo2;

    public class ChildFoo {
        public int id;
        public String name;
    }
}

对象数组

假如返回的是json数组,如下:

[{
    "id": 100,
    "body": "It is my post1",
    "number": 0.13,
    "created_at": "2014-05-20 19:12:38"
},
{
    "id": 101,
    "body": "It is my post2",
    "number": 0.14,
    "created_at": "2014-05-22 19:12:38"
}]

这种解析有两种方法:

  • 1、解析成数组
public static final String JSON_DATA = "...";
Foo[] foos = new Gson().fromJson(JSON_DATA, Foo[].class);
// 这时候想转成List的话调用如下方法
// List<Foo> foosList = Arrays.asList(foos);
  • 2、解析成List
public static final String JSON_DATA = "...";
Type listType = new TypeToken<ArrayList<Foo>>(){}.getType();
ArrayList<Foo> foos = new Gson().fromJson(JSON_DATA, listType);

总结

上面基本就总结到开发中常用到的集中类型,用法很简单方便,主要需要json数据抽象成对应的数据模型就ok了。不过阿里也有一套自己的开源json解析库–FastJson,据说性能更佳,但是实际应用中感觉Gson的解析已经相当快了,而且更习惯用Google官方的东西,所以对FastJson没有怎么研究,以后有时间使用体验一下。


<think>好的,我现在需要帮助用户了解Gson库的使用说明、示例和文档。首先,我得回忆一下Gson的基本信息,它是Google开发的用于Java对象和JSON之间转换的库。用户可能想知道如何快速上手,所以应该从基本用法开始,比如序列化和反序列化的示例。 接下来,我需要确保按照用户的要求,行内数学表达式用$符号,但这里可能用不上数学公式,但要注意其他格式要求,比如独立代码块用```包裹,结构清晰。用户提到要生成相关问题,所以最后需要准备几个相关的问题。 然后,检查用户提供的引用内容。引用[1]和[3]介绍了Gson的基本功能和用途,引用[4]和[5]给出了具体的代码示例,引用[2]是一个方法签名,可能涉及反序列化的方法。需要将这些引用自然地整合到回答中,并在末尾添加引用标识。 另外,用户要求回答结构清晰,分步骤说明,所以可能需要分点讲解核心功能、使用方法、示例代码、自定义配置以及文档资源。每个部分都要有对应的代码示例,比如序列化和反序列化的代码,这样用户能更直观地理解。 还要注意用户可能关心的常见问题,比如如何处理复杂对象、自定义序列化策略、性能优化等,这些可以作为相关问题的部分,或者放在高级特性里。需要确保回答真实可靠,引用提供的资料,比如提到最佳实践和注意事项来自引用[3]。 最后,生成的相关问题应该覆盖用户可能进一步想了解的内容,比如Gson与其他库的比较、异常处理、复杂结构处理等。确保问题具体且有引导性,帮助用户深入探索。</think>### Gson库使用说明与示例 #### 一、核心功能 Gson库实现了Java对象与JSON数据之间的双向转换,支持泛型、集合、嵌套对象等复杂结构[^3]。核心功能包含: - **序列化**:将Java对象转为JSON字符串(`toJson()`) - **反序列化**:将JSON字符串转为Java对象(`fromJson()`) #### 二、基本使用方法 1. **添加依赖** ```xml <!-- Maven配置 --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency> ``` 2. **创建Gson实例** ```java Gson gson = new Gson(); // 默认配置 ``` #### 三、示例代码 1. **序列化示例** ```java // 将Java对象转为JSON字符串 Student student = new Student("张三", 20); String json = gson.toJson(student); // 输出: {"name":"张三","age":20} ``` 2. **反序列化示例** ```java // 将JSON字符串转为Java对象 String jsonData = "{\"name\":\"李四\",\"age\":22}"; Student stu = gson.fromJson(jsonData, Student.class);[^4] ``` #### 四、高级配置 通过`GsonBuilder`实现自定义配置: ```java Gson gson = new GsonBuilder() .setPrettyPrinting() // 美化JSON输出 .serializeNulls() // 序列化null值 .setDateFormat("yyyy-MM-dd") // 日期格式 .create(); ``` #### 五、官方文档 - [Gson用户指南](https://github.com/google/gson/blob/master/UserGuide.md) - [API文档](https://www.javadoc.io/doc/com.google.code.gson/gson/latest/com.google.gson/com/google/gson/Gson.html)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值