Google Gson

Gson网址http://code.google.com/p/google-gson/


1.简单的处理list和map

Java代码
  1. Gson gson = new  Gson();  
  2. List testList = new  ArrayList();  
  3. testList.add("first" );  
  4. testList.add("second" );  
  5. String listToJson = gson.toJson(testList);  
  6. System.out.println(listToJson);       
  7. //prints ["first","second"]   
  8.   
  9. Map testMap = new  HashMap();  
  10. testMap.put("id""id.first" );  
  11. testMap.put("name" ,"name.second" );  
  12. String mapToJson = gson.toJson(testMap);  
  13. System.out.println(mapToJson);    
  14. //prints {"id":"id.first","name":"name.second"}   
		Gson gson = new Gson();
		List testList = new ArrayList();
		testList.add("first");
		testList.add("second");
		String listToJson = gson.toJson(testList);
		System.out.println(listToJson);		
		//prints ["first","second"]
		
		Map testMap = new HashMap();
		testMap.put("id", "id.first");
		testMap.put("name","name.second");
		String mapToJson = gson.toJson(testMap);
		System.out.println(mapToJson);	
		//prints {"id":"id.first","name":"name.second"}

 2.处理带泛型的集合

Java代码
  1. List<TestBean> testBeanList = new  ArrayList<TestBean>();  
  2. TestBean testBean = new  TestBean();  
  3. testBean.setId("id" );  
  4. testBean.setName("name" );  
  5. testBeanList.add(testBean);  
		List<TestBean> testBeanList = new ArrayList<TestBean>();
		TestBean testBean = new TestBean();
		testBean.setId("id");
		testBean.setName("name");
		testBeanList.add(testBean);
		
Java代码
  1. java.lang.reflect.Type type = new  com.google.gson.reflect.TypeToken<List<TestBean>>() {  
  2. }.getType();  
  3. String beanListToJson = gson.toJson(testBeanList,type);  
  4. System.out.println(beanListToJson);  
  5. //prints [{"id":"id","name":"name"}]   
  6.   
  7. List<TestBean> testBeanListFromJson = gson.fromJson(beanListToJson, type);  
  8. System.out.println(testBeanListFromJson);  
  9. //prints [TestBean@1ea5671[id=id,name=name,birthday=<null>]]   
		java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<List<TestBean>>() {
		}.getType();
		String beanListToJson = gson.toJson(testBeanList,type);
		System.out.println(beanListToJson);
		//prints [{"id":"id","name":"name"}]
		
		List<TestBean> testBeanListFromJson = gson.fromJson(beanListToJson, type);
		System.out.println(testBeanListFromJson);
		//prints [TestBean@1ea5671[id=id,name=name,birthday=<null>]]

map等其他集合类型同上



3.Date类型转化


先写工具类


Java代码
  1. import  java.lang.reflect.Type;  
  2.   
  3. import  com.google.gson.JsonDeserializationContext;  
  4. import  com.google.gson.JsonDeserializer;  
  5. import  com.google.gson.JsonElement;  
  6. import  com.google.gson.JsonParseException;  
  7.   
  8. public  class  UtilDateDeserializer implements  JsonDeserializer<java.util.Date> {  
  9.   
  10.     @Override   
  11.     public  java.util.Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)  
  12.             throws  JsonParseException {  
  13.         return  new  java.util.Date(json.getAsJsonPrimitive().getAsLong());  
  14.     }  
  15. }  
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;

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

	@Override
	public java.util.Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
			throws JsonParseException {
		return new java.util.Date(json.getAsJsonPrimitive().getAsLong());
	}
}


Java代码
  1. import  java.lang.reflect.Type;  
  2.   
  3. import  com.google.gson.JsonElement;  
  4. import  com.google.gson.JsonPrimitive;  
  5. import  com.google.gson.JsonSerializationContext;  
  6. import  com.google.gson.JsonSerializer;  
  7.   
  8. public  class  UtilDateSerializer implements  JsonSerializer<java.util.Date> {  
  9.   
  10.     @Override   
  11.     public  JsonElement serialize(java.util.Date src, Type typeOfSrc,     
  12.             JsonSerializationContext context) {     
  13.         return  new  JsonPrimitive(src.getTime());     
  14.     }     
  15.   
  16. }  
import java.lang.reflect.Type;

import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;

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

	@Override
    public JsonElement serialize(java.util.Date src, Type typeOfSrc,   
            JsonSerializationContext context) {   
        return new JsonPrimitive(src.getTime());   
    }   

}


Java代码
  1. /**  
  2.      * 序列化方法  
  3.      * @param bean  
  4.      * @param type  
  5.      * @return  
  6.      */   
  7.     public  static  String bean2json(Object bean, Type type) {  
  8.         Gson gson = new  GsonBuilder().registerTypeAdapter(java.util.Date.classnew  UtilDateSerializer())  
  9.                 .setDateFormat(DateFormat.LONG).create();  
  10.         return  gson.toJson(bean);  
  11.     }  
  12.   
  13.     /**  
  14.      * 反序列化方法  
  15.      * @param json  
  16.      * @param type  
  17.      * @return  
  18.      */   
  19.     public  static  <T> T json2bean(String json, Type type) {  
  20.         Gson gson = new  GsonBuilder().registerTypeAdapter(java.util.Date.classnew  UtilDateDeserializer())  
  21.                 .setDateFormat(DateFormat.LONG).create();  
  22.         return  gson.fromJson(json, type);  
  23.     }  
/**
	 * 序列化方法
	 * @param bean
	 * @param type
	 * @return
	 */
	public static String bean2json(Object bean, Type type) {
		Gson gson = new GsonBuilder().registerTypeAdapter(java.util.Date.class, new UtilDateSerializer())
				.setDateFormat(DateFormat.LONG).create();
		return gson.toJson(bean);
	}

	/**
	 * 反序列化方法
	 * @param json
	 * @param type
	 * @return
	 */
	public static <T> T json2bean(String json, Type type) {
		Gson gson = new GsonBuilder().registerTypeAdapter(java.util.Date.class, new UtilDateDeserializer())
				.setDateFormat(DateFormat.LONG).create();
		return gson.fromJson(json, type);
	}



现在开始测试


Java代码
  1. List<TestBean> testBeanList = new  ArrayList<TestBean>();  
  2. TestBean testBean = new  TestBean();  
  3. testBean.setId("id" );  
  4. testBean.setName("name" );  
  5. testBean.setBirthday(new  java.util.Date());  
  6. testBeanList.add(testBean);  
  7.   
  8. java.lang.reflect.Type type = new  com.google.gson.reflect.TypeToken<List<TestBean>>() {  
  9. }.getType();  
  10. String beanListToJson = bean2json(testBeanList, type);  
  11. System.out.println("beanListToJson:"  + beanListToJson);  
  12. //prints [{"id":"id","name":"name","birthday":1256531559390}]   
  13.   
  14. List<TestBean> testBeanListFromJson = json2bean(beanListToJson, type);  
  15. System.out.println(testBeanListFromJson);  
  16. //prints [TestBean@77a7f9[id=id,name=name,birthday=Mon Oct 26 12:39:05 CST 2009]]   
		List<TestBean> testBeanList = new ArrayList<TestBean>();
		TestBean testBean = new TestBean();
		testBean.setId("id");
		testBean.setName("name");
		testBean.setBirthday(new java.util.Date());
		testBeanList.add(testBean);

		java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<List<TestBean>>() {
		}.getType();
		String beanListToJson = bean2json(testBeanList, type);
		System.out.println("beanListToJson:" + beanListToJson);
		//prints [{"id":"id","name":"name","birthday":1256531559390}]

		List<TestBean> testBeanListFromJson = json2bean(beanListToJson, type);
		System.out.println(testBeanListFromJson);
		//prints [TestBean@77a7f9[id=id,name=name,birthday=Mon Oct 26 12:39:05 CST 2009]]



后记:对于java.sql.Date的转化同上类似,写两个类用于其序列化和反序列化即可SQLDateDeserializer implements  JsonDeserializer<java.sql.Date>

SQLDateSerializer implements  JsonSerializer<java.sql.Date>



 对于GsonBuilder详见:

 http://google-gson.googlecode.com/svn/tags/1.2.3/docs/javadocs/com/google/gson/GsonBuilder.html



*注:TestBean就是一个带id、name、birthday的javabean,就不在这里贴代码了

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值