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"
);
String json = gson.toJson(bean);
System.out.println(json);
bean = gson.fromJson(json, JavaBean.
class
);
System.out.println(bean);
}
/**
* List轉換成Json字符串
*/
@Test
public
void
testList2Json() {
List list =
new
ArrayList();
for
(
int
i =
0
; i <
5
; i++) {
list.add(
"element"
+ i);
}
System.out.println(list);
String json = gson.toJson(list);
System.out.println(json);
}
/**
* 泛型List、Json相互轉換
*/
@Test
public
void
testGenericListJson() {
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);
java.lang.reflect.Type type =
new
com.google.gson.reflect.TypeToken<List<JavaBean>>(){}.getType();
String json = gson.toJson(list, type);
System.out.println(json);
List<JavaBean> users = gson.fromJson(json.toString(), type);
System.out.println(users);
}
/**
* Map轉換成Json字符串
*/
@Test
public
void
testMap2Json() {
Map map =
new
HashMap();
map.put(
"id"
,
"1001"
);
map.put(
"name"
,
"scott"
);
map.put(
"age"
,
20
);
map.put(
"addr"
,
"BJ"
);
System.out.println(map);
String json = gson.toJson(map);
System.out.println(json);
}
/**
* 泛型Map、Json相互轉換
*/
@Test
public
void
testGenericMapJson() {
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);
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);
Map<String, JavaBean> users = gson.fromJson(json.toString(), type);
System.out.println(users);
}
/**
* 帶日期類型Bean、Json相互轉換
*/
@Test
public
void
testDateBeanJson() {
DateBean bean =
new
DateBean(
"1001"
,
"scott"
,
20
,
new
Date());
gson = gsonBuilder.registerTypeAdapter(java.util.Date.
class
,
new
DateSerializerUtils()).setDateFormat(DateFormat.LONG).create();
String json = gson.toJson(bean);
System.out.println(json);
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<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);
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);
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);
}
}