• 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:28
    22  */
    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     @Override
    48     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     @Override
    14     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         // 序列化Map
    11         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         // 序列化List
    17         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数据的序列化和反序列化,以上应该够用了。

  • 相关阅读:
    Ajax跨域解决实例
    关于tween.js测试介绍
    signal() 和 sigaction()
    信号概述
    监控文件事件
    栈和栈帧
    进程结构和内存布局
    关于文件I/o的原子操作
    查询Linux系统中glibc的版本
    IOPS和Throughput
  • 原文地址:https://www.cnblogs.com/liuriqi/p/4039187.html
Copyright © 2020-2023  润新知