改造解析选择性JSON数据

时间:2017-07-17 06:29:07

标签: android json retrofit2

我正在解析来自this URL的JSON数据。这样打电话:

call.enqueue(new Callback<List<Gift>>() {
    @Override
    public void onResponse(Call<List<Gift>> call, Response<List<Gift>> response) {
            List<Gift> places = response.body();
    }
}

但我不想要这个。我想首先检查flag是否为0。如果是,那么我想只获取list键的值。并且想要使用以下模型:

class Gift extends RealmObject{
    String code, name;
    //getters & setters
}

我怎样才能做到这一点? 任何帮助都非常感谢。

3 个答案:

答案 0 :(得分:1)

试试这种方式

class GiftList{
String flag;
String flag1;
List<Gift> gifts;

}

call.enqueue(new Callback<List<GiftList>>() {
    @Override
    public void onResponse(Call<List<GiftList>> call, Response<List<GiftList>> response) {
            List<GiftList> places = response.body();
      if(places.getFlag().equals("0"){
       List<Gift> gifts=places.getList();

    }
}

答案 1 :(得分:1)

您可以创建另一个POJO来存储您的Gift类,该类存储外部值,如flagflag1,然后您可以访问flag以确定您是否将进入list 这是它的样子:

class GiftResponse extends RealmObject{
    int flag;
    String flag1;
    Gift[] list;
    //getters & setters
}

并按原样保留Gift课程,然后您可以获得以下数据:

call.enqueue(new Callback<GiftResponse>() {
    @Override
    public void onResponse(Call<GiftResponse> call, Response<GiftResponse> response) {
            GiftResponse res = response.body();
            if(res.getFlag() == 0) {
                Gift[] arrGifts = res.getList();
            }
    }
}

使用此方法,您可以更改呼叫响应类型。

答案 2 :(得分:0)

您可以创建ResponseWrapper类,如下所示:

public class ResponseWrapper<T> {

  private T data;
  @JsonProperty("flag")
  public int flag;
  @JsonProperty("flag1")
  public String flag1;

  public T getData() {
     return data;
  }
}

并修改您的callback

call.enqueue(new Callback<ResponseWrapper<List<Gift>>>() {
   @Override
   public void onResponse(Call<ResponseWrapper<List<Gift>>> call, Response<ResponseWrapper<List<Gift>>> response) {
        int flag = response.body().flag;
        List<Gift> places = response.body().getData();
   }
}
相关问题