2012-02-29 71 views
1

這可能有點長,所以請耐心等待。在Android中使用GSON對JSON串進行反序列化

我正在開發Android項目。我有我需要反序列化爲代表的JSON結構對象JSON字符串,JSON字符串是類似下面的東西:

{"parents":[ 
    {"parent":{ 
      "id":1, 
      "name":"Sam", 
      "childs":[ 
       { 
        "child":{ 
         "id":1, 
         "name":"Alice", 
         "books":[ 
          { 
           "book":{ 
            "id":1, 
            "name":"Alice in Wonderland" 
           } 
          } 
         ] 
        } 
       } 
      ] 
     } 

    }  
]} 

注意數組有重複的值(即許多父母和許多孩子),我只是在這裏放一行以使其縮短。

有了這個,我創建的類,以容納結構:我會創建一個共同的類,以適應重複屬性

public class Containers{ 
    private List<Parent> parents; 
    //setter and getter.. 
} 

public static class Parent extends CommonItem { 
    private List<Child> childs; 
    //setter and getter.. 
} 

public static class Child extends CommonItem { 
    private List<Book> books; 
    //setter and getter.. 
} 

public class CommonItem{ 
    private int id; 
    private String name; 
    //setter and getter 
} 

注。 下面是一個使用GSON我如何解析它們:

Gson gson = new Gson(); 
Containers parents = gson.fromJson(jsonString, Containers.class); 

分析後(也就是沒有錯誤),我嘗試檢索的對象。父母列表中的對象數量是正確的(即,JSON字符串中有5個父母,父母列表中有5個父對象)。但是,它們的所有屬性都不存在,並且子樹也缺失。

我想了很多配置,包括刪除擴展類,並把所有的id和名稱在各自的類,但結果仍然是相同的。

任何人都可以給我任何指針,我哪裏出錯了?

感謝一堆!

+0

OPS ......有另一個類的書,我沒放,但它遵循的模式爲兒童如何。此外,所有三類父,子和書都是容器的內部類。 – ipohfly 2012-02-29 11:38:32

回答

1

您的JSON和Java類不匹配。

讓閱讀

{"parents":[ 
    {"parent":{ 
      "id":1, 
      "name":"Sam", 
      "childs":[ 
       { 
        "child":{ 
         "id":1, 
         "name":"Alice", 
         "books":[ 
          { 
           "book":{ 
            "id":1, 
            "name":"Alice in Wonderland" 
           } 
          } 
         ] 
        } 
       } 
      ] 
     } 

    }  
]} 

你的頂級對象有一個具有parents,因爲它的屬性類的List。您的Java類Container具有parents屬性。好。

現在這個列表parents是一個List的對象具有parent屬性。您的Parent對象是否具有parent屬性?第

進一步向下,每個Parentidname,和對象的Listchilds(兒童,應該是)有child屬性,貴Child類有它的屬性?

同樣,去books

你嘗試在你的JSON類,如

{"parents":[ 
     { 
      "id":1, 
      "name":"Sam", 
      "childs":[ 
        { 
         "id":1, 
         "name":"Alice", 
         "books":[ 
          { 
            "id":1, 
            "name":"Alice in Wonderland" 
          } 
         ] 
        } 

      ] 
     } 
]} 
+0

Thanx。在分別添加父級,子級和書籍屬性的中間層容器類後,我終於找到了它的工作。 – ipohfly 2012-02-29 16:23:54