转自:http://lixigao449778967.blog.163.com/blog/static/24985164201269105928783/

1.需要的Jar包

1) Google Gson(gson-xxx.jar)下载地址:http://code.google.com/p/google-gson/downloads/list

2)JUnit4

2. 应用实例代码

下载地址:http://download.csdn.net/source/3499627

包括如下类:

1)普通JavaBean类/带日期属性的JavaBean类:JavaBean.java/DateBean.java

2)日期序列/反序列工具类:DateSerializerUtils.java、DateDeserializerUtils.java

3)测试类GsonTester.java

具体代码:

1)JavaBean类/DateBean类

JavaBean属性:String id、String name、int age、String addr;

DateBean属性:String id、String name、int age、java.util.Date date;

2)

DateSerializerUtils.java

package com.lupeng.javase.json.util;

import java.lang.reflect.Type;

import java.util.Date;

import com.google.gson.JsonElement;

import com.google.gson.JsonPrimitive;

import com.google.gson.JsonSerializationContext;

import com.google.gson.JsonSerializer;

/**

* 日期解序列实用工具类

@author Lupeng

@date   2011-08-06

*/

public class DateSerializerUtils implements JsonSerializer<java.util.Date>{

@Override

public JsonElement serialize(Date date, Type type,

JsonSerializationContext content) {

return new JsonPrimitive(date.getTime());

}

}

DateDeserializerUtils.java

package com.lupeng.javase.json.util;

import java.lang.reflect.Type;

import com.google.gson.JsonDeserializationContext;

import com.google.gson.JsonDeserializer;

import com.google.gson.JsonElement;

import com.google.gson.JsonParseException;

/**

* 日期序列化实用工具类

@author Lupeng

@date   2011-08-06

*/

public class DateDeserializerUtils implements JsonDeserializer<java.util.Date>{

@Override

public java.util.Date deserialize(JsonElement json, Type type,

JsonDeserializationContext context) throws JsonParseException {

return new java.util.Date(json.getAsJsonPrimitive().getAsLong());

}

}

3)测试类GsonTester.java

package com.lupeng.javase.apps.json;

import java.text.DateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.junit.Before;

import org.junit.Test;

import com.google.gson.Gson;

import com.google.gson.GsonBuilder;

import com.lupeng.javase.json.bean.DateBean;

import com.lupeng.javase.json.bean.JavaBean;

import com.lupeng.javase.json.util.DateDeserializerUtils;

import com.lupeng.javase.json.util.DateSerializerUtils;

/**

* Google Gson解析Json数据实例

*

* 1.Bean、Json转换          testBeanJson()

* 2.List -> Json转换     testList2Json()

* 3.泛型List、Json相互转换 testGenericList2Json()

* 4.Map -> Json转换         testMap2Json()

* 5.泛型Map、Json相互转换 testGenericMap2Json()

* 6.带日期属性Bean、Json转换  testDateBeanJson()

* 7.带日期属性泛型List、Json转换

*                           testDateGenericListJson()

*

@author Lupeng

@create 2011-08-05

@modify 2011-08-06

*/

@SuppressWarnings("unchecked")

public class GsonTester {

private Gson gson = null;

private GsonBuilder gsonBuilder = null;

@Before

public void setUp() {

gson = new Gson();

gsonBuilder = new GsonBuilder();

}

/**

* JavaBean、Json相互转换

*/

@Test

public void testBeanJson() {

JavaBean bean = new JavaBean("1001", "scott", 20, "TL");

// Bean -> Json

String json = gson.toJson(bean);

System.out.println(json);

// Json -> Bean

bean = gson.fromJson(json, JavaBean.class);

System.out.println(bean);

}

/**

* List转换成Json字符串

*/

@Test

public void testList2Json() {

// List

List list = new ArrayList();

for(int i = 0; i < 5; i++) {

list.add("element" + i);

}

System.out.println(list);

// List -> Json

String json = gson.toJson(list);

System.out.println(json);

}

/**

* 泛型List、Json相互转换

*/

@Test

public void testGenericListJson() {

// 泛型List

List<JavaBean> list = new ArrayList<JavaBean>();

for(int i = 0; i < 3; i++) {

JavaBean user = new JavaBean("100" + i, "name" + i, 20 + i, "BJ" + i);

list.add(user);

}

System.out.println(list);

// 泛型List -> Json

java.lang.reflect.Type type =

new com.google.gson.reflect.TypeToken<List<JavaBean>>(){}.getType();

String json = gson.toJson(list, type);

System.out.println(json);

// Json -> 泛型List

List<JavaBean> users = gson.fromJson(json.toString(), type);

System.out.println(users);

}

/**

* Map转换成Json字符串

*/

@Test

public void testMap2Json() {

// Map数据

Map map = new HashMap();

map.put("id", "1001");

map.put("name", "scott");

map.put("age", 20);

map.put("addr", "BJ");

System.out.println(map);

// Map -> Json

String json = gson.toJson(map);

System.out.println(json);

}

/**

* 泛型Map、Json相互转换

*/

@Test

public void testGenericMapJson() {

// 泛型Map数据

Map<String, JavaBean> map = new HashMap<String, JavaBean>();

for(int i = 0; i < 5; i++) {

JavaBean user = new JavaBean("100" + i, "name" + i, 20 + i, "LN" + i);

map.put("100" + i, user);

}

System.out.println(map);

// 泛型Map -> Json

java.lang.reflect.Type type =

new com.google.gson.reflect.TypeToken<Map<String, JavaBean>>(){}.getType();

String json = gson.toJson(map, type);

System.out.println(json);

// Json -> Map

Map<String, JavaBean> users = gson.fromJson(json.toString(), type);

System.out.println(users);

}

/**

* 带日期类型Bean、Json相互转换

*/

@Test

public void testDateBeanJson() {

// 日期Bean数据

DateBean bean = new DateBean("1001", "scott", 20, new Date());

// Bean(带日期属性) -> Json

gson = gsonBuilder.registerTypeAdapter(java.util.Date.class,

new DateSerializerUtils()).setDateFormat(DateFormat.LONG).create();

String json = gson.toJson(bean);

System.out.println(json);

// Json -> Bean(带日期类型属性)

gson = gsonBuilder.registerTypeAdapter(java.util.Date.class,

new DateDeserializerUtils()).setDateFormat(DateFormat.LONG).create();

java.lang.reflect.Type type =

new com.google.gson.reflect.TypeToken<DateBean>(){}.getType();

DateBean b = gson.fromJson(json, type);

System.out.println(b);

}

/**

* 泛型日期List、Json相互转换

*/

@Test

public void testDateGenericListJson() {

// 泛型日期List

List<DateBean> list = new ArrayList<DateBean>();

for(int i = 0; i < 3; i++) {

DateBean user = new DateBean("100" + i, "name" + i, 20 + i, new Date());

list.add(user);

}

System.out.println(list);

// 泛型日期List -> Json

gson = gsonBuilder.registerTypeAdapter(java.util.Date.class,

new DateSerializerUtils()).setDateFormat(DateFormat.LONG).create();

java.lang.reflect.Type type =

new com.google.gson.reflect.TypeToken<List<DateBean>>(){}.getType();

String json = gson.toJson(list, type);

System.out.println(json);

// Json -> 泛型日期List

gson = gsonBuilder.registerTypeAdapter(java.util.Date.class,

new DateDeserializerUtils()).setDateFormat(DateFormat.LONG).create();

List<DateBean> users = gson.fromJson(json.toString(), type);

System.out.println(users);

}

}

 
 
 
 
 

Google Gson解析Json数据应用实例的更多相关文章

  1. Android网络之数据解析----使用Google Gson解析Json数据

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  2. JAVA使用Gson解析json数据,实例

    封装类Attribute: public class Attribute { private int id; private String name; private int age; public ...

  3. Android中使用Gson解析JSON数据的两种方法

    Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下   Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...

  4. Android中使用Gson解析JSON数据

      Android中使用Gson解析JSON数据 在Android中可以使用Gson解析JSON数据 首先,从 code.google.com/p/google-gson/downloads/list ...

  5. 我的Android进阶之旅------>解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

    1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: ...

  6. 通过Gson解析Json数据

    Json是一种数据格式,便于数据传输.存储.交换:Gson是一种组件库,可以把java对象数据转换成json数据格式. gson.jar的下载地址:http://search.maven.org/#s ...

  7. 使用Gson解析JSON数据

    本文使用gson对json进行解析处理 首先,下载gson包 ,本文使用(gson-1.6.jar) package com.whroid.java.json; import com.google.g ...

  8. Gson解析json数据(转)

    一. www.json.org这是JSON的官方网站. 首先,我,我们需要在code.google.com/p/google-gson/downloads/list下载JSON的jar包,解析后把gs ...

  9. android 初步了解应用Gson 解析Json数据

    1,因为没有服务器返回数据,对于Tomcat又懒得去配,所以我直接把数据写死到app中 先写一个实体类,便于操作 /** * 实体类 */ public class Person { int id ; ...

随机推荐

  1. oracle 将科学计数法数据转换为非科学计数法数据

    oracle 自定义函数: CREATE OR REPLACE FUNCTION ConvertNumeric(rawData VARCHAR2) --用于返回转换科学计算法dhx RETURN VA ...

  2. DemoExample

    <HTML> <HEAD> <TITLE>使用递归求解斐波那契数列</TITLE> </HEAD> <BODY> <?ph ...

  3. XSS前端防火墙

    前一段时间,在EtherDream大神的博客里看到关于XSS防火墙的一系列文章,觉得很有意思.刚好科创要做一个防火墙,就把XSS前端防火墙作为一个创新点,着手去实现了. 在实现过程中,由于各种原因,比 ...

  4. 【BZOJ 1053】[HAOI2007]反素数ant

    Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1 ...

  5. poj 1659 Frogs' Neighborhood (DFS)

    http://poj.org/problem?id=1659 Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total S ...

  6. 给QT不规则窗口添加阴影

    在家休息,试着用QT去模仿各类管家软件的界面,做到自绘阴影的时候,蛋疼了. 网上搜到的基本都是一篇文章转来转去,一开始也被思路限制了. 尝试重载paintEvent,然后自己绘制矩形阴影,但是绘制的算 ...

  7. BZOJ 4123 [Baltic2015] Hacker 解题报告

    首先,Alice 会选择一个长度为 $\lfloor\frac{n+1}{2}\rfloor$ 的区间,我们把这个长度记为 $len$. 有这么一个结论:令 $F_i$ 为覆盖 $i$ 点的所有长度为 ...

  8. PAT-乙级-1038. 统计同成绩学生(20)

    1038. 统计同成绩学生(20) 时间限制 250 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求读入N名学生的成绩,将 ...

  9. mysql deadlock处理

    1.SHOW ENGINE INNODB STATUS 得到最后一次死锁发生的状况 =====================================140110 11:43:07 INNOD ...

  10. POJ 1562 && ZOJ 1709 Oil Deposits(简单DFS)

    题目链接 题意 : 问一个m×n的矩形中,有多少个pocket,如果两块油田相连(上下左右或者对角连着也算),就算一个pocket . 思路 : 写好8个方向搜就可以了,每次找的时候可以先把那个点直接 ...