Gson的使用


 

原文地址: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();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM