2016-03-02 3 views
21

で値を読みます。Gson - 私は両方<strong>応答は二つの鍵</strong>除いて同一である応答の2種類を持つ2つの異なるキーの私のAndroidプロジェクトで

レスポンス1

{"fullName":"William Sherlock Scott Holmes","address":"221B Baker Street, London, England, UK","downloads":642,"rating":3,"repos":["https://link1","https://link2","https://link3"]} 

レスポンス2

{"name":"Sherlock","city":"London","downloads":642,"rating":3,"repos":["https://link1","https://link2","https://link3"]} 

あなたは2つだけのキー名がのfullName /名前アドレス/都市

Iドンを変更する回答が表示された場合「Tは、他の応答のための1つの以上のPOJOを作成したいです。今私の質問があり、両方の応答を読み取るために一つだけPOJOを使用することが可能ということです。

public class AccountInfo { 
    private String name; 
    private String city; 
    //other objects 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getCity() { 
     return city; 
    } 

    public void setCity(String city) { 
     this.city = city; 
    } 
    //other setters and getters 
} 

すべてのヘルプは、うん、あなたは、単一のPOJOでそれを行うことができます...

+2

にヌルの動作確認を行いながら

public class AccountInfo { private String name; private String city; private String fullname; private String address; } 

のようなあなたのPOJOクラスで可能なすべてのフィールドを定義しますが、ゲッターフィールドが、それはないでしょう空の場合、これらの追加のフィールドは、getterとsetterください問題が生じる。これを試して、他に何かを手伝ってもらえるかどうか教えてください –

+1

@Rakshitありがとう。 Doug Stevensonの答えを確認してください。 – Bharatesh

答えて

37

あなたは@SerializedName、アノテーションを使用して、2人の異なるJSONの名前から値を受け入れるようにメンバーに注釈を付けることができます。

@SerializedName(value = "name", alternate = {"fullName"}) 
private String name; 
@SerializedName(value = "city", alternate = {"address"}) 
private String city; 

どちらかという要素は、このように注釈を付けているメンバーの中に配置することができます。

更新日: @SerializedName代替名をデシリアライズは、はい、あなたは完全に両方の応答をデシリアライズするために1つのPOJOクラスを使用することができます Version 2.4

+0

ありがとうございました.... – Bharatesh

+0

java.lang.IllegalArgumentExceptionを取得中:クラス –

0

を理解されるであろう。これを試してみてください:

public class POJO { 

@SerializedName("name") 
public String name; 

@SerializedName("city") 
public String city; 

@SerializedName("fullName") 
public String fullName; 

@SerializedName("address") 
public String address; 

@SerializedName("downloads") 
public Integer downloads; 

@SerializedName("rating") 
public Integer rating; 

@SerializedName("repos") 
public List<String> repos = new ArrayList<String>(); 

} 

あなたはヌルの値をチェックする必要が解析中。 名前都市レスポンス2を解析中変数が

nullになります:フルネームアドレスはヌル

注意次のようになります。チェックしてみ - などについて

応答1を解析中他のものを使用する前にnullの値を取得するnullpointerexception

+0

ありがとうございます。@Doug Stevensonの回答は、「ヌル」を確認する必要がないため、より多くの使用があります。 – Bharatesh

+0

これを行うための不正なアプローチ –

1

に追加されたとき。あなたのPOJOクラスは、両方の応答からのキーが含まれています。

public class Response { 


private String name; 
private String city; 
private String fullName; 
private String address; 
private Integer downloads; 
private Integer rating; 
private List<String> repos ; 

} 

が、応答クラスを使用した場合、最初の応答ため、名前ヌルになることに注意してください、と秒1アドレスためとをFULLNAME。

0

それらfeilds

+0

のコンバータを作成できません。答えをありがとう...しかし、他の答えがあなたが答えたものと同じであることをチェックしていない... – Bharatesh

関連する問題