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

发布于 2024-04-29 11:18:43 字数 3236 浏览 30 评论 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技术交流群

发布评论

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

关于作者

为人所爱

暂无简介

文章
评论
29 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

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