日常接口的数据传输通常使用xml或者json来传递数据,xml较庞大但是描述数据能力十分出众,json数据结构较小而且支持ajax传输,xml在数据传输和解析资源占用都比较逊色于json。因此日常的接口通常都使用json的数据格式进行传输。一方面能减少应用或者客户端如Android应用解析数据的资源占用,另一方面节省宝贵的数据传输时间。

Java中对Json的序列化和反序列化常用的工具有Json、Fastjson、Gson等。其中,Fastjson是阿里巴巴的开源产品,用Java语言实现,号称是速度最快的Json序列化工具。

今天学习了Gson工具,并做了Demo加深学习印象,直接贴上代码在代码中说明问题:

Person类:

 /*
* Copyright 2013 Alibaba.com All right reserved. This software is the
* confidential and proprietary information of Alibaba.com ("Confidential
* Information"). You shall not disclose such Confidential Information and shall
* use it only in accordance with the terms of the license agreement you entered
* into with Alibaba.com.
*/
package com.yunos.tv.common.util; import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken; /**
* 类GsonTest.java的实现描述:TODO 类实现描述
* @author riqi 2013年8月5日 下午10:26:28
*/ class Person { private String name; private int age; private Family family; public Person(String name, int age, Family family) {
super();
this.name = name;
this.age = age;
this.family = family;
} public Family getFamily() {
return family;
} public void setFamily(Family family) {
this.family = family;
} @Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", family=" + family + "]";
}
}

Family类:

 class Family {

     private String father;

     private String mother;

     public Family(String father, String mother) {
super();
this.father = father;
this.mother = mother;
} @Override
public String toString() {
return "Family [father=" + father + ", mother=" + mother + "]";
} }

测试过程:

 public class GsonTest {

     public static Gson gson = new Gson();

     public static void main(String[] args) {
String name = "riqi";
int age = 26;
Family family = new Family("爸爸", "妈妈"); // 序列化Map
Map<String, Object> userMap = new HashMap<String, Object>();
userMap.put("name", name);
userMap.put("age", age);
System.out.println(gson.toJson(userMap)); //{"age":26,"name":"riqi"} // 序列化List
List<Object> userList = new ArrayList<Object>();
userList.add(name);
userList.add(age);
System.out.println(gson.toJson(userList)); //["riqi",26] // 序列化对象
System.out.println(gson.toJson(family)); //{"father":"爸爸","mother":"妈妈"} // 借助TypeToken泛型实现单个对象序列化和反序列化
Person person = new Person(name, age, family);
Type personType = new TypeToken<Person>() {
}.getType();
String personJsonTo = gson.toJson(person, personType);
Person personJsonFrom = gson.fromJson(personJsonTo, personType);
Family familyJsonFrom = personJsonFrom.getFamily();
System.out.println(personJsonTo); //{"name":"riqi","age":26,"family":{"father":"爸爸","mother":"妈妈"}}
System.out.println(personJsonFrom);//Person [name=riqi, age=26, family=Family [father=爸爸, mother=妈妈]]
System.out.println(familyJsonFrom);//Family [father=爸爸, mother=妈妈] // 借助TypeToken泛型实现对象列表序列化和反序列化
List<Person> personList = new ArrayList<Person>();
Type personListType = new TypeToken<List<Person>>() {
}.getType();
for (int i = 0; i < 2; i++) {
Person personTmp = new Person(name, age + i, family); // 年龄做了变化
personList.add(personTmp);
}
String personListJsonTo = gson.toJson(personList, personListType);
List<Person> personListJsonFrom = gson.fromJson(personListJsonTo, personListType);
System.out.println(personListJsonTo);//[{"name":"riqi","age":26,"family":{"father":"爸爸","mother":"妈妈"}},{"name":"riqi","age":27,"family":{"father":"爸爸","mother":"妈妈"}}]
System.out.println(personListJsonFrom);//[Person [name=riqi, age=26, family=Family [father=爸爸, mother=妈妈]], Person [name=riqi, age=27, family=Family [father=爸爸, mother=妈妈]]]
}
}

对于日常的接口Json数据的序列化和反序列化,以上应该够用了。

Json工具类库之Gson实战笔记的更多相关文章

  1. JSON工具类库: alibaba/fastjson 使用记录

    JSON工具类库: alibaba/fastjson 使用记录 一.了解JSON JSON标准规范中文文档: http://www.json.org/json-zh.html 最佳实践:http:// ...

  2. Json 工具介绍 fastjson gson jackson

    1. fastjson fastjson是一个Java语言编写的高性能功能完善的JSON库.它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致, 是目前Java语言中最快的J ...

  3. 强大的json工具:fastJson

    fastJson   FastJSON是一个很好的java开源json工具类库,相比其他同类的json类库,它的速度的确是fast,最快!但是文档做得不好,在应用前不得不亲测一些功能.   实际上其他 ...

  4. Android进阶笔记17:3种JSON解析工具(org.json、fastjson、gson)

    一. 目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),其中解析速度最快的是Gson. 3种json工具下 ...

  5. Android进阶笔记14:3种JSON解析工具(org.json、fastjson、gson)

    一. 目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),其中解析速度最快的是Gson. 3种json工具下 ...

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

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

  7. JSON数据解析(GSON方式) (转)

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 在上一篇博文<Andro ...

  8. Java 的 JSON 开源类库选择比较(zz)

    在看了作者的介绍,然后我又到mvnrepository上去看了各个库的的使用数之后,发现只能在jackson和gson之间做选择. 以下是原文 有效选择七个关于Java的JSON开源类库 April  ...

  9. Java中json工具对比分析

    Java中几个json工具分析 1, 环境 JDK1.6+IDE(IntelliJ IDEA)+windowsXP+GBK编码 2,分析对象 jackson1.8.2 http://jackson.c ...

随机推荐

  1. java学习路线-Java技术人员之路从0基础到高级

    满满的  全是干货 java基础: 尚学堂 马士兵   个人推荐 历经5年锤练--史上最适合刚開始学习的人入门的Java基础视频   很具体   适合 时间多的看 传智播客java基础班 马士兵线程 ...

  2. Maven 命令行创建项目时 Could not find goal ‘create’ in plugin org.apache.maven.plugins:...

    使用maven3.3.9 版本,进行命令行创建项目时输入以下命令创建失败 mvn archetype:create -DgroupId=com.zang.maven  -DartifactId=sys ...

  3. LDAP简介及LDAP服务器的安装与配置

    一.LDAP简介 全称:Lightweight Directory Access Protocol,目录服务是一种特殊的数据库系统,其专门针对读取. LDAP目录中的信息是按照树型结构组织,具体信息存 ...

  4. Centos开机自己主动挂载windows中的ntfs磁盘

    装了windows和centos双系统后,发如今centos中无法进入windows中的磁盘,更不要说查看磁盘里的文件了! 原来默认情况下.centos不支持Widows NTFS硬盘分区读写,要想把 ...

  5. 解决带fusionCharts的页面多次点击后不显示的问题

    问题: 假设不使用公司封装的fusioncharts.使用自己定义的.建议不要使用例如以下方法 使用$(document).ready( 页面载入完之后再载入,会导致多次点击带有fusionchart ...

  6. 手把手教你用git和SourceTree上传项目到github细解(转)

    尊重原创:https://blog.csdn.net/qq_32365567/article/details/52859166 一.引言 我想大家现在都很熟悉github了,也能运用github上开源 ...

  7. Android开发系列之性能优化

    一直想整理一篇关于Android性能优化的博客,正好今天借鉴一些书籍资料,总结一下自己对于这块的一些认识.相信大家都听说过16ms的原则,即每两个画面之间的绘制时间间隔不能超过16ms,否则人眼能够感 ...

  8. Yarn源码分析之MapReduce作业中任务Task调度整体流程(一)

    v2版本的MapReduce作业中,作业JOB_SETUP_COMPLETED事件的发生,即作业SETUP阶段完成事件,会触发作业由SETUP状态转换到RUNNING状态,而作业状态转换中涉及作业信息 ...

  9. abp的开发20180425

    指定默认语言. mvc5 在Global中的 protected override void Application_BeginRequest(object sender, EventArgs e) ...

  10. PHP使用CURL获取302跳转后的地址实例

    /*返回一个302地址*/     function  curl_post_302($url, $vars) { $ch = curl_init();          curl_setopt($ch ...