原文地址:http://www.cnblogs.com/Dentist/p/Mr_Dentist.html
Gson拓展包可以很方便的實現在對象與Json之間的轉換。他自己也有JsonObject這個類,類似於Android包里的JSONObject。在java(非Android項目)里就可以用他來操作json。
先要導入Gson包:
將gson-2.2.4.jar放入項目lib文件夾。然后項目刷新后右鍵-Build Path-Configure Build Path-->add jar在你的項目里找到它。
另外。注意更新!!!下載地址:https://code.google.com/p/google-gson/downloads/list

下面一個簡單的例子:
public class Person { private String name; private int age; public Person(String name,int age){ this.name=name; this.age=age; } }
1.Gson的序列化,對象與String之間的轉換
Person p=new Person("jack",18); Gson gson=new Gson(); String json=gson.toJson(p); Log.i(TAG, json);
輸出結果: {"name":"jack","age":18}
對象數組的也是自動轉換
ArrayList<Person> p=new ArrayList<Person>(); p.add(new Person("jack",18)); p.add(new Person("alex",23)); p.add(new Person("jane",15)); Gson gson=new Gson(); String json=gson.toJson(p); Log.i(TAG, json);
輸出結果: [{"name":"jack","age":18},{"name":"alex","age":23},{"name":"jane","age":15}]
2.Gson的反序列化,String與對象的轉換
jsonstr= {"name":"jack","age":18}
Gson gson=new Gson(); Person person=gson.fromJson(jsonstr, Person.class);
jsonstr= [{"name":"jack","age":18},{"name":"alex","age":23},{"name":"jane","age":15}]
Gson gson=new Gson(); Person[] person1=gson.fromJson(jsonstr, Person[].class);
對於數組類可以直接轉。但對於集合類就必須要用TypeToken。它是gson提供的數據類型轉換器,可以支持各種數據集合類型轉換。
Gson gson=new Gson(); ArrayList<Person> person2=gson.fromJson(jsonstr, new TypeToken<ArrayList<Person>>(){}.getType());
還要說一下如果對象的某個值為null。這個屬性將不會在String中顯示。
ArrayList<Person> p=new ArrayList<Person>(); p.add(new Person("jack",18)); p.add(new Person(null,23)); p.add(new Person("jane",15)); Gson gson=new Gson(); String json=gson.toJson(p); Log.i(TAG, json);
輸出結果:[{"name":"jack","age":18},{"age":23},{"name":"jane","age":15}]
如果要被序列化的String缺少某個屬性例如上面的輸出。也會轉換成功。並且對應值為null。
3.Gson序列化的類屏蔽
比如你想將一個類的幾個屬性序列化,但他繼承自一個很復雜的父類。你不想序列化他的父類。
又或者你在反序列化一個類時,因為復雜的父類而序列化失敗。
使用這個類。屏蔽父類或屬性類成員不應序列化的類。
public class SpecificClassExclusionStrategy implements ExclusionStrategy { private final Class<?> excludedThisClass; private final Class<?> excludedThisClassFields; /*** * 過濾器初始化 * * @param excludedThisClass * 該類和繼承自該類的對象實例將被忽略 * @param excluedThisClassFields * 該類的屬性將不被序列化 */ public SpecificClassExclusionStrategy(Class<?> excludedThisClass, Class<?> excluedThisClassFields) { this.excludedThisClass = excludedThisClass; this.excludedThisClassFields = excluedThisClassFields; } @Override public boolean shouldSkipClass(Class<?> clazz) { if (clazz == null) return false; if (clazz.equals(excludedThisClass)) return true; return shouldSkipClass(clazz.getSuperclass()); } @Override public boolean shouldSkipField(FieldAttributes f) { return f.getDeclaringClass().equals(excludedThisClassFields); } }
Gson gson2 = new GsonBuilder().setExclusionStrategies(new SpecificClassExclusionStrategy(null, Model.class)).create(); PersonBrief.PersonBriefResult result = gson2.fromJson(response, PersonBrief.PersonBriefResult.class);
感覺平時就用到這么多了。
還有一個在對象與JsonObject直接轉的。但這個JsonObject不是Android的JSONObject所以很少用。
Person p=new Person("jack",18); Gson gson=new Gson(); JsonElement jsonele=gson.toJsonTree(p); JsonObject json=jsonele.getAsJsonObject();