2012-02-29 17 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" 
           } 
          } 
         ] 
        } 
       } 
      ] 
     } 

    }  
]} 

配列に対して繰り返し値(すなわち、多くの親と多くの子)があることに注意してください私はちょうどそれを短くするためにここに1行を入れてください。私は繰り返し属性に対応するために、共通のクラスを作成したのだ

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 
} 

注:これにより

iは構造を収容するためのクラスを作成しました。以下 は私がGSON使用してそれらを解析する方法である:

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

解析した後、私はオブジェクトを取得しようとする(エラーがありません)。親リストのオブジェクト数は正しいです(つまり、JSON文字列に5つの親があり、親リストに5つの親オブジェクトがあります)。しかし、それらの属性はすべて存在せず、子ツリーも欠落しています。

私は、拡張クラスを削除し、それぞれのクラスにすべてのIDと名前を入れるなど、数多くの設定を試みましたが、結果は同じです。

誰でもどこに間違っていたかのポインタを私に与えることができますか?

Thanx a bunch!

+0

オプスのようなJSONであなたのクラスを試してみました...私は入れませんでしたが、それは子供がどのようにようなパターンを以下の書籍のための別のクラスがあります。さらに、Parent、Child、Bookの3つのクラスは、Containersの内部クラスです。 – ipohfly

答えて

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という属性がありますか?第

ゴーさらに下に、各Parentidnameを持っており、childsなどのオブジェクトのListchild属性を持つ属性(子供、でなければなりません)、あなたのChildクラスがそれを持っているのでしょうか? No.

同様に、booksになります。

あなたは

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

      ] 
     } 
]} 
+0

Thanx。親クラス、子クラス、ブック属性をそれぞれ含むようにコンテナクラスの中間層を追加した後、ついにそれを動作させました。 – ipohfly

関連する問題