首页 > 代码库 > Json工具类库之Gson实战笔记

Json工具类库之Gson实战笔记

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

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

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

Person类:

 1 /* 2  * Copyright 2013 Alibaba.com All right reserved. This software is the 3  * confidential and proprietary information of Alibaba.com ("Confidential 4  * Information"). You shall not disclose such Confidential Information and shall 5  * use it only in accordance with the terms of the license agreement you entered 6  * into with Alibaba.com. 7  */ 8 package com.yunos.tv.common.util; 9 10 import java.lang.reflect.Type;11 import java.util.ArrayList;12 import java.util.HashMap;13 import java.util.List;14 import java.util.Map;15 16 import com.google.gson.Gson;17 import com.google.gson.reflect.TypeToken;18 19 /**20  * 类GsonTest.java的实现描述:TODO 类实现描述21  * @author riqi 2013年8月5日 下午10:26:2822  */23 24 class Person {25 26     private String name;27 28     private int    age;29 30     private Family family;31 32     public Person(String name, int age, Family family) {33         super();34         this.name = name;35         this.age = age;36         this.family = family;37     }38 39     public Family getFamily() {40         return family;41     }42 43     public void setFamily(Family family) {44         this.family = family;45     }46 47     @Override48     public String toString() {49         return "Person [name=" + name + ", age=" + age + ", family=" + family + "]";50     }51 }

Family类:

 1 class Family { 2  3     private String father; 4  5     private String mother; 6  7     public Family(String father, String mother) { 8         super(); 9         this.father = father;10         this.mother = mother;11     }12 13     @Override14     public String toString() {15         return "Family [father=" + father + ", mother=" + mother + "]";16     }17 18 }

测试过程:

 1 public class GsonTest { 2  3     public static Gson gson = new Gson(); 4  5     public static void main(String[] args) { 6         String name = "riqi"; 7         int age = 26; 8         Family family = new Family("爸爸", "妈妈"); 9 10         // 序列化Map11         Map<String, Object> userMap = new HashMap<String, Object>();12         userMap.put("name", name);13         userMap.put("age", age);14         System.out.println(gson.toJson(userMap)); //{"age":26,"name":"riqi"}15 16         // 序列化List17         List<Object> userList = new ArrayList<Object>();18         userList.add(name);19         userList.add(age);20         System.out.println(gson.toJson(userList)); //["riqi",26]21 22         // 序列化对象23         System.out.println(gson.toJson(family)); //{"father":"爸爸","mother":"妈妈"}24 25         // 借助TypeToken泛型实现单个对象序列化和反序列化26         Person person = new Person(name, age, family);27         Type personType = new TypeToken<Person>() {28         }.getType();29         String personJsonTo = gson.toJson(person, personType);30         Person personJsonFrom = gson.fromJson(personJsonTo, personType);31         Family familyJsonFrom = personJsonFrom.getFamily();32         System.out.println(personJsonTo); //{"name":"riqi","age":26,"family":{"father":"爸爸","mother":"妈妈"}}33         System.out.println(personJsonFrom);//Person [name=riqi, age=26, family=Family [father=爸爸, mother=妈妈]]34         System.out.println(familyJsonFrom);//Family [father=爸爸, mother=妈妈]35 36         // 借助TypeToken泛型实现对象列表序列化和反序列化37         List<Person> personList = new ArrayList<Person>();38         Type personListType = new TypeToken<List<Person>>() {39         }.getType();40         for (int i = 0; i < 2; i++) {41             Person personTmp = new Person(name, age + i, family); // 年龄做了变化42             personList.add(personTmp);43         }44         String personListJsonTo = gson.toJson(personList, personListType);45         List<Person> personListJsonFrom = gson.fromJson(personListJsonTo, personListType);46         System.out.println(personListJsonTo);//[{"name":"riqi","age":26,"family":{"father":"爸爸","mother":"妈妈"}},{"name":"riqi","age":27,"family":{"father":"爸爸","mother":"妈妈"}}]47         System.out.println(personListJsonFrom);//[Person [name=riqi, age=26, family=Family [father=爸爸, mother=妈妈]], Person [name=riqi, age=27, family=Family [father=爸爸, mother=妈妈]]]48     }49 }

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

Json工具类库之Gson实战笔记