2012-01-16 14 views
2

私はfreebaseへのクエリ呼び出しを行っており、JSON応答を受け取ります。応答は次の構造を持ちます:AndroidのJavaオブジェクトに対するJSONレスポンスの解析に失敗しました

{ 
    "code":   "/api/status/ok", 
    "result": [ 
    { 
     "/common/topic/image": [{ 
     "guid": "#9202a8c04000641f8000000004b67f6d" 
     }], 
     "/people/person/profession": [{ 
     "name": "Critic" 
     }], 
     "id": "/en/michael_jackson_1942", 
     "name": "Michael Jackson", 
     "type": "/people/person" 
    }, 
    { 
     "/common/topic/image": [{ 
     "guid": "#9202a8c04000641f800000001b90fdea" 
     }], 
     "/people/person/profession": [{ 
     "name": "Actor" 
     }], 
     "id": "/en/michael_jackson_1970", 
     "name": "Michael Jackson", 
     "type": "/people/person" 
    } 
    ], 
    "status":  "200 OK", 
    "transaction_id": "cache;cache03.p01.sjc1:8101;2012-01-16T18:28:36Z;0055" 
} 

GSONを使ってJavaオブジェクトのArrayListでこの応答を解析する必要があります。これを行うには、get/setを使ってオブジェクトのクラスを作成し、それを解析できるようにする必要があります。あるいは、もっと簡単なやり方がありますか?私は単純なJSON文字列を使ってきましたが、この場合、必要なクラスの構造をリメイクできません。基本的には、ArrayList<Person>のようなものが必要です。ここで、Personにはjson文字列のすべての属性が含まれています。

何か助けていただければ幸いです。ありがとうございました。

あなたはすべてのフィールドが必要な場合は、最終的な解決策は、

public class FreebaseResponse { 
    @SerializedName("code") 
    public String code; 

    @SerializedName("result") 
    public ArrayList<Person> result; 

    @SerializedName("status") 
    public String status; 

    @SerializedName("transaction_id") 
    public String transaction_id; 
} 

public class Person { 
    @SerializedName("/common/topic/image") 
    public ArrayList<Person.Guid> imageGuid; 

    @SerializedName("/people/person/profession") 
    public ArrayList<Person.Profession> profession; 

    @SerializedName("id") 
    public String id; 

    @SerializedName("name") 
    public String name; 

    @SerializedName("type") 
    public String type; 

    private class Guid 
    { 
     @SerializedName("guid") 
     public String guid; 
    } 

    private class Profession 
    { 
     @SerializedName("name") 
     public String name; 
    } 
} 

答えて

0

私はあなたが、codeが含まれているFreebaseResponseクラス、resultArrayList<Person>)を作成などのフィールドとデシリアライズするGsonを使用することができますね。有効な識別子ではないnamesです。 /common/topic/imageが問題になります。私は自分でそれを試していないが、それはSerializedName注釈は、トリックを行う必要があります私に思われる。

+0

あなたの答えに基づいて私のソリューションでqestionを更新しました。ありがとうございました。 – Alin

0

以下の回答で応じて、あなたが言及した方法は、進むべき道のように私には思えます。データのほんの一部だけが必要な場合は、直接取得することができます。一般的に、私はJSONはオブジェクト表現のためのものなので、適切なクラスを作成する方が良いと思います。このデータからさらに多くのものを必要とするため、今後もあなたのやり方が楽になります。

+0

問題は適切なクラスを作成しています... – Alin

関連する問題