2017-11-18 277 views
0

最近,我在Gson反序列化中遇到了一個問題。這是我的目標:如何使用自定義對象的空列表反序列化Gson

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

這是我的JSON:

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

當解析此JSON與上述目標,我總是得到錯誤:Expected a com.google.gson.JsonObject but was com.google.gson.JsonArray。如果上面的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)

相關問題