Android Gson Google 出品用于解析 JSON 的库

发布于 2024-04-29 11:18:43 字数 3236 浏览 20 评论 0

目前的客户端大都有和服务端进行交互,而数据的格式基本就是 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 没有怎么研究,以后有时间使用体验一下。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

为人所爱

暂无简介

0 文章
0 评论
24 人气
更多

推荐作者

13886483628

文章 0 评论 0

流年已逝

文章 0 评论 0

℡寂寞咖啡

文章 0 评论 0

笑看君怀她人

文章 0 评论 0

wkeithbarry

文章 0 评论 0

素手挽清风

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文