配色: 字号:
gson使用
2015-06-15 | 阅:  转:  |  分享 
  
gson使用

文章分类:Java编程

gson:谷歌提供的JSON的解决方案。它的站点是http://code.google.com/p/google-gson/。本人用过org.json和的JSON-lib中提供的解决方案。先说下org.json,它属于轻量级的JSON的。它能够将Object或者ArrayList的转换为JSONObject的和JsonArrayList。但是在反转换的JSON字符串时却只能够提供字符串的结果。所以比较适合开发者后期处理。至于的JSON-lib的在反转方面做得比前者强了许多。它通过JSONObject.fromObject和JSONObject.toBean可以将Bean、ArrayList、HashMap中与JSONObject的互相转换。但是遇到嵌套问题如一个Bean1->HashMap->Bean2。当它对该对象反转换时将出现Bean2为JSONObject的对象的情况.现在讲到gson了.它通过reflection来识别对象.见下面例子:------------------------華麗的分割線-----------------------------packageorg.gson.bean;importjava.util.Date;importcom.google.gson.annotations.Expose;/普通的UserBean/publicclassUserBean{@ExposeprivateStringid;@ExposeprivateStringname;privateDatebirthday;publicStringgetId(){?returnid;}publicvoidsetId(Stringid){?this.id=id;}publicStringgetName(){?returnname;}publicvoidsetName(Stringname){?this.name=name;}publicDategetBirthday(){?returnbirthday;}publicvoidsetBirthday(Datebirthday){?this.birthday=birthday;}@OverridepublicStringtoString(){?return"UserBean[birthday="+birthday+",id="+id+",name="???+name+"]";}}------------------------華麗的分割線------------------------------packageorg.gson.bean;importjava.util.List;importjava.util.Map;/?包含Arrylist和HashMap,里面保持UserBean?/publicclassGroupBean{privateStringid;privateMapuserMap;privateListuserList;publicStringgetId(){?returnid;}publicvoidsetId(Stringid){?this.id=id;}publicMapgetUserMap(){?returnuserMap;}publicvoidsetUserMap(MapuserMap){?this.userMap=userMap;}publicListgetUserList(){?returnuserList;}publicvoidsetUserList(ListuserList){?this.userList=userList;}@OverridepublicStringtoString(){?return"GroupBean[id="+id+",userList="+userList+",userMap="???+userMap+"]";}}------------------------華麗的分割線------------------------------------------------------華麗的分割線------------------------------packageorg.gson.main;importorg.gson.bean.UserBean;importcom.google.gson.Gson;importcom.google.gson.GsonBuilder;/?通過註釋過濾轉換對象?/publicclassFilterAnnotationTest{publicstaticvoidmain(String[]args){?UserBeanuser=newUserBean();?user.setId("1001");?user.setName("张三");??/???设置注释过滤功能???Gsongson=newGsonBuilder()???.registerTypeAdapter(Id.class,newIdTypeAdapter())???.serializeNulls()???.setDateFormat(DateFormat.LONG)????.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)???.setPrettyPrinting()???.setVersion(1.0)???.create();??/?GsonBuilderbuilder=newGsonBuilder();?//不转换没有@Expose注解的字段?builder.excludeFieldsWithoutExposeAnnotation();?Gsongson=builder.create();?//将JavaBean字符串转换为JSON?StringsUser=gson.toJson(user);?System.out.println(sUser);?//{"id":1001,"name":"张三"}?//将JSON字符串转换为JavaBean?UserBeanuser2=gson.fromJson(sUser,UserBean.class);?System.out.println(user2.getId()+","+user2.getName());?//1001,张三}}------------------------華麗的分割線------------------------------packageorg.gson.main;importjava.lang.reflect.Type;importjava.util.ArrayList;importjava.util.List;importorg.gson.bean.UserBean;importcom.google.gson.Gson;importcom.google.gson.reflect.TypeToken;/模板反射對象Bean@authoryansheng/publicclassTemplateTest{publicstaticvoidmain(String...strings){?ListtestBeanList=newArrayList();?UserBeantestBean=newUserBean();?testBean.setId("1");?testBean.setName("name");?testBeanList.add(testBean);??Gsongson=newGson();?Typetype=newTypeToken>(){}.getType();??StringbeanListToJson=gson.toJson(testBeanList,type);?System.out.println(beanListToJson);?//prints[{"id":"id","name":"name"}]?ListtestBeanListFromJson=gson.fromJson(beanListToJson,type);?System.out.println(testBeanListFromJson);?//prints[TestBean@1ea5671[id=id,name=name,birthday=]]}}------------------------華麗的分割線------------------------------packageorg.gson.main;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importcom.google.gson.Gson;importcom.google.gson.reflect.TypeToken;/簡單的集合使用@authoryansheng/publicclassSimpleCollectionTest{publicstaticvoidmain(String[]args){?Gsongson=newGson();?//将ArrayList字符串转换为JSON?ListtestList=newArrayList();?testList.add("first");?testList.add("second");??StringlistToJson=gson.toJson(testList);?System.out.println(listToJson);?//prints["first","second"]??//将JSON字符串转换为ArrayList?ListtestList2=(List)gson.fromJson(listToJson,???newTypeToken>(){???}.getType());?System.out.println(testList2);??//将HashMap字符串转换为JSON?MaptestMap=newHashMap();?testMap.put("id","id.first");?testMap.put("name","name.second");??StringmapToJson=gson.toJson(testMap);?System.out.println(mapToJson);?//prints{"id":"id.first","name":"name.second"}??//将JSON字符串转换为HashMap?MapuserMap2=(Map)gson.fromJson(mapToJson,???newTypeToken>(){???}.getType());?System.out.println(userMap2.get("id"));}}?------------------------華麗的分割線------------------------------packageorg.gson.main;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importorg.gson.bean.GroupBean;importorg.gson.bean.UserBean;importcom.google.gson.Gson;importcom.google.gson.reflect.TypeToken;/嵌套使用對象Bean@authoryansheng/publicclassNestedTest{publicstaticvoidmain(String[]args){?UserBeanuser1=newUserBean();?user1.setId("1001");?user1.setName("张三");??UserBeanuser2=newUserBean();?user2.setId("1002");?user2.setName("李四");??MapuserMap=newHashMap();?userMap.put("user1",user1);?userMap.put("user2",user2);??ListuserList=newArrayList();?userList.add(user1);?userList.add(user2);??GroupBeangroupBean=newGroupBean();?groupBean.setId("1");?groupBean.setUserMap(userMap);?groupBean.setUserList(userList);???Gsongson=newGson();?StringsGroupBean=gson.toJson(groupBean,newTypeToken(){?}.getType());?System.out.println(sGroupBean);?//{"user1":{"id":1001,"name":"张三"},"user2":{"id":1002,"name":"李四"}}?//将JSON字符串转换为HashMap?GroupBeangroupBean2=(GroupBean)gson.fromJson(sGroupBean,???newTypeToken(){???}.getType());?System.out.println(groupBean2);?//张三}}------------------------華麗的分割線-----------------------------/定義對Date的轉換/packageorg.gson.main;importjava.lang.reflect.Type;importcom.google.gson.JsonDeserializationContext;importcom.google.gson.JsonDeserializer;importcom.google.gson.JsonElement;importcom.google.gson.JsonParseException;/?反串行Data/publicclassUtilDateDeserializerimplementsJsonDeserializer{@Override???publicjava.util.Datedeserialize(JsonElementjson,TypetypeOfT,JsonDeserializationContextcontext)??????????????throwsJsonParseException{??????????returnnewjava.util.Date(json.getAsJsonPrimitive().getAsLong());??????}??}------------------------華麗的分割線-----------------------------packageorg.gson.main;importjava.lang.reflect.Type;importcom.google.gson.JsonElement;importcom.google.gson.JsonPrimitive;importcom.google.gson.JsonSerializationContext;importcom.google.gson.JsonSerializer;/?串行Data/publicclassUtilDateSerializerimplementsJsonSerializer{@OverridepublicJsonElementserialize(java.util.Datesrc,TypetypeOfSrc,??JsonSerializationContextcontext){?returnnewJsonPrimitive(src.getTime());}}------------------------華麗的分割線-----------------------------packageorg.gson.main;importjava.lang.reflect.Type;importjava.text.DateFormat;importjava.util.ArrayList;importjava.util.List;importorg.gson.bean.UserBean;importcom.google.gson.Gson;importcom.google.gson.GsonBuilder;/date測試類/publicclassDateTest{/?序列化方法??@parambean?@paramtype?@return?/publicstaticStringbean2json(Objectbean,Typetype){?Gsongson=newGsonBuilder().registerTypeAdapter(java.util.Date.class,???newUtilDateSerializer()).setDateFormat(DateFormat.LONG)???.create();?returngson.toJson(bean);}/?反序列化方法??@paramjson?@paramtype?@return?/publicstaticTjson2bean(Stringjson,Typetype){?Gsongson=newGsonBuilder().registerTypeAdapter(java.util.Date.class,???newUtilDateDeserializer()).setDateFormat(DateFormat.LONG)???.create();?returngson.fromJson(json,type);}publicstaticvoidmain(String[]args){?ListtestBeanList=newArrayList();?UserBeantestBean=newUserBean();?testBean.setId("id");?testBean.setName("name");?testBean.setBirthday(newjava.util.Date());?testBeanList.add(testBean);?java.lang.reflect.Typetype=newcom.google.gson.reflect.TypeToken>(){?}.getType();?StringbeanListToJson=bean2json(testBeanList,type);?System.out.println("beanListToJson:"+beanListToJson);?//prints[{"id":"id","name":"name","birthday":1256531559390}]?ListtestBeanListFromJson=json2bean(beanListToJson,type);?System.out.println(testBeanListFromJson);?//prints[TestBean@77a7f9[id=id,name=name,birthday=MonOct2612:39:05?//CST2009]]}}json是以字符串为基础实现的数据载体格式.所以从大局上来讲相对于xml有其自己的灵活性.所以使用gson可以很好的解决以对象为主题的传输问题,毕竟第一章即提到一切接对象.但是这样做也散失了json的灵活性.所以开发的时候还是需要根据情况选择的.



献花(0)
+1
(本文系一剑飘雪201...首藏)