Google Gson

    技术2022-05-19  28

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

    1.简单的处理list和map

    Java代码 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"}    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代码 List<TestBean> testBeanList = new  ArrayList<TestBean>();   TestBean testBean = new  TestBean();   testBean.setId("id" );   testBean.setName("name" );   testBeanList.add(testBean);   List<TestBean> testBeanList = new ArrayList<TestBean>(); TestBean testBean = new TestBean(); testBean.setId("id"); testBean.setName("name"); testBeanList.add(testBean); Java代码 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>]]    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代码 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());       }   }   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代码 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());          }         }   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代码 /**        * 序列化方法        * @param bean        * @param type        * @return        */        public  static  String bean2json(Object bean, Type type) {           Gson gson = new  GsonBuilder().registerTypeAdapter(java.util.Date.classnew  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.classnew  UtilDateDeserializer())                   .setDateFormat(DateFormat.LONG).create();           return  gson.fromJson(json, type);       }   /** * 序列化方法 * @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代码 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]]    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)