2017-11-18 18 views
0

最近、私はGsonの逆シリアル化に問題がありました。これは私の物である:カスタムオブジェクトの空のリストでGsonを逆シリアル化する方法

class Foo{ 
    public List<Donation> donations; 
    class Donation{ 
     // SerializedName here. 
    } 
} 

は、これが私のJSONです:Expected a com.google.gson.JsonObject but was com.google.gson.JsonArray

{ 
    "donations": [] // sometimes, this array is empty. 
} 
// this is none empty one. 
{ 
"donations": [ 
     { 
      "doner_id": 4, 
      "name": "abc", 
      "donate": "103" 
     } 
    ] 
} 

上記のオブジェクトでこのJSONを解析するとき、私は常にエラーを得ました。 donationsが空でない場合、すべて正常に動作します。それを解決するにはどうすればよいですか?

+2

あなたはデータ –

+0

@vikaskumarとJSONの寄付を投稿することができ、私は追加されました。 –

+1

寄付リストのサイズや長さが0より大きい場合は、条件を確認してからコードを適用してください。何もしないでください。 –

答えて

0

ここで私はあなたのjsonをコンパイルし、空でも空でもない寄付についてもうまく動作します。あなたが探しているものがあればそれを確認してください。

String json = "{\n" + 
      "\"donations\": [\n" + 
      "  {\n" + 
      "   \"doner_id\": 4,\n" + 
      "   \"name\": \"abc\",\n" + 
      "   \"donate\": \"103\"\n" + 
      "  }\n" + 
      " ]\n" + 
      "}"; 
    JsonParser jsonParser = new JsonParser(); 
    JsonObject object = jsonParser.parse(json).getAsJsonObject(); 
    Gson gson = new Gson(); 
    SampleModel sampleModels1 = gson.fromJson(object, SampleModel.class); 
    assertNotNull(sampleModels1); 

SampleModel.java

public class SampleModel { 
    @SerializedName("donations") 
    @Expose 
    private List<Donations> mDonationsList; 

    public List<Donations> getDonationsList() { 
     return mDonationsList; 
    } 

    public void setDonationsList(final List<Donations> donationsList) { 
     mDonationsList = donationsList; 
    } 

    public class Donations { 
     @SerializedName("doner_id") 
     @Expose 
     private String doner_id; 
     @SerializedName("name") 
     @Expose 
     private String name; 
     @SerializedName("donate") 
     @Expose 
     private String donate; 

     public String getDoner_id() { 
      return doner_id; 
     } 

     public void setDoner_id(final String doner_id) { 
      this.doner_id = doner_id; 
     } 

     public String getName() { 
      return name; 
     } 

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

     public String getDonate() { 
      return donate; 
     } 

     public void setDonate(final String donate) { 
      this.donate = donate; 
     } 

    } 
} 
0

チェックこのアウトそれはだ場合JSON配列です:

import java.lang.reflect.Type; 
import com.google.gson.reflect.TypeToken; 

... 

Type listType = new TypeToken<ArrayList<YourClass>>(){}.getType(); 
List<YourClass> yourClassList = new Gson().fromJson(jsonArray, listType); 

Google Gson - deserialize list object? (generic type)

関連する問題