Android Gson

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

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

单个对象

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

  1. {
  2. "id": 100,
  3. "body": "It is my post",
  4. "number": 0.13,
  5. "created_at": "2014-05-22 19:12:38"
  6. }

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

  1. public class Foo {
  2. public int id;
  3. public String body;
  4. public float number;
  5. public String created_at;
  6. }

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

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

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

  1. public class Foo {
  2. public int id;
  3. public String body;
  4. public float number;
  5. public Date created_at;
  6. }
  7. public static final String JSON_DATA = "...";
  8. GsonBuilder gsonBuilder = new GsonBuilder();
  9. gsonBuilder.setDateFormat("yyyy-MM-dd HH:mm:ss");
  10. Gson gson = gsonBuilder.create();
  11. Foo foo = gson.fromJson(JSON_DATA, Foo.class);

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

  1. public class Foo {
  2. public int id;
  3. public String body;
  4. public float number;
  5. @SerializedName("created_at")
  6. public String createdAt;
  7. }

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

对象的嵌套

假设要返回如下数据:

  1. {
  2. "id": 100,
  3. "body": "It is my post",
  4. "number": 0.13,
  5. "created_at": "2014-05-22 19:12:38"
  6. "foo2": {
  7. "id": 200,
  8. "name": "haha"
  9. }
  10. }

那么对象的定义是这样的

  1. public class Foo {
  2. public int id;
  3. public String body;
  4. public float number;
  5. public String created_at;
  6. public ChildFoo foo2;
  7. public class ChildFoo {
  8. public int id;
  9. public String name;
  10. }
  11. }

对象数组

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

  1. [{
  2. "id": 100,
  3. "body": "It is my post1",
  4. "number": 0.13,
  5. "created_at": "2014-05-20 19:12:38"
  6. },
  7. {
  8. "id": 101,
  9. "body": "It is my post2",
  10. "number": 0.14,
  11. "created_at": "2014-05-22 19:12:38"
  12. }]

这种解析有两种方法:

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

总结

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

【转】Android Gson的使用的更多相关文章

  1. Android Gson的使用总结

    1.概念 Gson是谷歌发布的一个json解析框架 2.如何获取 github:https://github.com/google/gson android studio使用 compile 'com ...

  2. Android Gson 操作

    JSON序列化后的数据不带类名与名命空间,所以这两个服务端跟客户端可以不对应,需要保证字段对应即可 Asp.net MVC端 using System; using System.Collection ...

  3. Android Gson解析

    目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),解析速度最快的是Gson,下载地址:https://co ...

  4. Android Gson使用笔记

    最近在做一个java web service项目,需要用到jason,本人对java不是特别精通,于是开始搜索一些java平台的json类库. 发现了google的gson,因为之前对于protoco ...

  5. Android Gson深入分析

    眼下解析json有三种工具:org.json(Java经常使用的解析),fastjson(阿里巴巴project师开发的).Gson(Google官网出的).解析速度最快的是Gson,下载地址:htt ...

  6. Android Gson解析json详解

    目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),解析速度最快的是Gson,下载地址:https://co ...

  7. android gson使用

    第一步注册:  compile 'com.google.code.gson:gson:2.6.2' 第二步初始化: Gson gson = new GsonBuilder() .setLenient( ...

  8. Android Gson解析复杂Json

    JSON原数据 {"total":1,"rows":[{"ID":1,"Title":"台州初级中学招收初一年 ...

  9. Android Gson解析json工具类封装

    package com.springSecurity.gson; import java.util.ArrayList; import java.util.List; import java.util ...

随机推荐

  1. 【BZOJ】【3280】小R的烦恼

    网络流/费用流 和软件开发那题基本相同,只是多加了一个“雇佣研究生”的限制:不同价格的研究生有不同的数量…… 那么只需加一个附加源点,对每一种研究生连边 S->ss 容量为l[i],费用为p[i ...

  2. Springmvc jar包介绍

    spring.jar是包含有完整发布的单个jar 包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到 spring-m ...

  3. java数组与内存控制

    1.1数组的初始化 数组是大多数编程语言都提供一种的复合结构,如果程序需要多个类型相同的变量时,就可以考虑定义一个数组.java语言的数组变量时引用类型的变量,因此具有java独有的特性. java数 ...

  4. JavaScript之数据类型讲解

    JavaScript中有5种简单数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number和String.还有1种复杂数据类型——Object,Object本质上是由一 ...

  5. AS3之正则表达式讲解

    限制输入内容 (一).my_txt.restrict = "A-Z 0-9";               仅允许在文本字段中输入大写字符.空格和数字 (二).my_txt.res ...

  6. centos msyql 安装与配置

    Mysql具有简单易学.体积小等优点,深受编程开发初学者的喜爱 工具/原料 接入Internet的Centos计算机 安装Mysql 1 Centos 6.6下安装Mysql很简单, yum list ...

  7. 使用Zend OpCache 提高 PHP 5.5+ 性能

    使用Zend OpCache 提高 PHP 5.5+ 性能 作者:admin | 时间:February 28, 2015 | 分类:Linux | 评论:1 评论 PHP 5.5 以后内建了 OpC ...

  8. Docker 面临的安全隐患,我们该如何应对

    [编者按]对比虚拟机,Docker 在体量等方面拥有显著的优势.然而,当 DevOps 享受 Docker 带来扩展性.资源利用率和弹性提升的同时,其所面临的安全隐患同样值得重视,近日 Chris T ...

  9. HDU 4632 Palindrome subsequence(区间dp,回文串,字符处理)

    题目 参考自博客:http://blog.csdn.net/u011498819/article/details/38356675 题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. ...

  10. iOS后台如何保持socket长连接和数据传输

    工程中使用tcp长连接来和服务端进行数据传输,在IOS平台上,由于苹果的后台机制,会有以下问题: 当程序退到后台的时候,所有线程被挂起,系统会回收所有的socket资源,那么socket连接就会被关闭 ...