从JSON制作Model类

时间:2020-02-14 09:11:46

标签: json

在这里,我正在尝试制作此JSON的模型类

{
  "debit": 1,
  "train": {
    "number": "14207",
    "name": "PADMAVAT EXP",
    "days": [
      {
        "code": "MON",
        "runs": "Y"
      },
      {
        "code": "TUE",
        "runs": "Y"
      },
      {
        "code": "WED",
        "runs": "Y"
      },
      {
        "code": "THU",
        "runs": "Y"
      },
      {
        "code": "FRI",
        "runs": "Y"
      },
      {
        "code": "SAT",
        "runs": "Y"
      },
      {
        "code": "SUN",
        "runs": "Y"
      }
    ],
    "classes": [
      {
        "code": "2A",
        "available": "Y",
        "name": "SECOND AC"
      },
      {
        "code": "3E",
        "available": "N",
        "name": "3rd AC ECONOMY"
      },
      {
        "code": "3A",
        "available": "Y",
        "name": "THIRD AC"
      },
      {
        "code": "2S",
        "available": "N",
        "name": "SECOND SEATING"
      },
      {
        "code": "CC",
        "available": "N",
        "name": "AC CHAIR CAR"
      },
      {
        "code": "SL",
        "available": "Y",
        "name": "SLEEPER CLASS"
      },
      {
        "code": "FC",
        "available": "N",
        "name": "FIRST CLASS"
      },
      {
        "code": "1A",
        "available": "Y",
        "name": "FIRST AC"
      }
    ]
  },
  "response_code": 200
}

我尝试这个 首先,我创建两个整数变量名称response_code和debit(因为“ {”和“}”内部是键和值对) 然后我在数组List和一个名为train和classes的List上创建,这些列表代表json中的train list和classes数组。仍然无法正常工作

public class NewTrain {
    @SerializedName("response_code")
    private int response_code;
    @SerializedName("debit")
    private int debit;
    @SerializedName("train")
    private List<TrainClass> train= null;
   @SerializedName("classes")
    private ArrayList<classes> arrayList = null;

    public int getResponse_code() {
        return response_code;
    }

    public void setResponse_code(int response_code) {
        this.response_code = response_code;
    }

    public int getDebit() {
        return debit;
    }

    public void setDebit(int debit) {
        this.debit = debit;
    }

    public List<TrainClass> getTrain() {
        return train;
    }

    public void setTrain(List<TrainClass> train) {
        this.train = train;
    }

    public ArrayList<classes> getArrayList() {
        return arrayList;
    }

    public void setArrayList(ArrayList<classes> arrayList) {
        this.arrayList = arrayList;
    }
}

public class TrainClass
 @SerializedName("number")
    private int number;
    @SerializedName("name")
    private String name;
    @SerializedName("days")
    private List<Day> dayList = null;

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public String getName() {
        return name;
    }

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

    public List<Day> getDayList() {
        return dayList;
    }

    public void setDayList(List<Day> dayList) {
        this.dayList = dayList;
    }
}
public class Day {
    @SerializedName("code")
    private String code;
    @SerializedName("runs")
    private String runs;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getRuns() {
        return runs;
    }

    public void setRuns(String runs) {
        this.runs = runs;
    }

}
public class classes {
    @SerializedName("code")
    private String code;

    @SerializedName("available")
    private String available;

    @SerializedName("name")
    private String name;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getAvailable() {
        return available;
    }

    public void setAvailable(String available) {
        this.available = available;
    }

    public String getName() {
        return name;
    }

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

但是相反,它给出了Begin Array,但是在第1行第2列是Begin Object! 从服务器方法调用API数据

 public void Show(View view) {

        MyWebService myWebService = MyWebService.retrofitfortrain.create(MyWebService.class);
        Call<List<NewTrain>>  call = myWebService.getTrainList();
      call.enqueue(new Callback<List<NewTrain>>() {
          @Override
          public void onResponse(Call<List<NewTrain>> call, Response<List<NewTrain>> response) {
              if(response.isSuccessful())
              {
                  for(NewTrain newTrain: response.body()) {
                      t.append(String.valueOf(newTrain.getResponse_code()));
                  }
              }
          }

          @Override
          public void onFailure(Call<List<NewTrain>> call, Throwable t) {
              Toast.makeText(getApplicationContext(),t.getMessage(),Toast.LENGTH_LONG).show();

          }
      });

    }

3 个答案:

答案 0 :(得分:1)

尝试

 export class RootObject {
    debit: number;
    train: Train;
    response_code: number;
}

export interface Train {
    number: string;
    name: string;
    days: Day[];
    classes: ClassModel[];
}
export interface Day {
    code: string;
    runs: string;
}

export interface ClassModel {
    code: string;
    available: string;
    name: string;
}

答案 1 :(得分:0)

根据提到的train的json不是列表,但是在类中将其列为列表。可能就是这个问题。因此,而不是:

@SerializedName("train")
private List<TrainClass> train= null;

做到

@SerializedName("train")
private TrainClass train= null;

并相应地更新getter,setter方法

答案 2 :(得分:0)

由于提到的JSON train包含JSON对象,而不是列表。 classes列表中的另一个将是TainClass之外的NewTrainClass的成员。

所以,而不是:

@SerializedName("train")
private List<TrainClass> train= null;

做到

@SerializedName("train")
private TrainClass train= null;

并将Classes移至TrainClass

@SerializedName("classes")
private ArrayList<classes> arrayList = null; 

最后,NewTrain对象将像

public class NewTrain {
    @SerializedName("response_code")
    private int response_code;
    @SerializedName("debit")
    private int debit;
    @SerializedName("train")
    private TrainClass train;

    public int getResponse_code() {
        return response_code;
    }

    public void setResponse_code(int response_code) {
        this.response_code = response_code;
    }

    public int getDebit() {
        return debit;
    }

    public void setDebit(int debit) {
        this.debit = debit;
    }

    public TrainClass getTrain() {
        return train;
    }

    public void setTrain(TrainClass train) {
        this.train = train;
    }
}

public class TrainClass
 @SerializedName("number")
    private int number;
    @SerializedName("name")
    private String name;
    @SerializedName("days")
    private List<Day> dayList = null;
   @SerializedName("classes")
    private ArrayList<classes> arrayList = null;
    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public String getName() {
        return name;
    }

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

    public List<Day> getDayList() {
        return dayList;
    }

    public void setDayList(List<Day> dayList) {
        this.dayList = dayList;
    }

    public ArrayList<classes> getArrayList() {
        return arrayList;
    }

    public void setArrayList(ArrayList<classes> arrayList) {
        this.arrayList = arrayList;
    }
}

看起来JSON仅包含NewTrain,而不包含List<NewTrain>。 nd还需要更新myWebService.getTrainList(); 您还需要更新

之类的方法
 public void Show(View view) {

    MyWebService myWebService = MyWebService.retrofitfortrain.create(MyWebService.class);
    Call<NewTrain>  call = myWebService.getTrainList();
  call.enqueue(new Callback<NewTrain>() {
      @Override
      public void onResponse(Call<NewTrain> call, Response<NewTrain> response) {
          if(response.isSuccessful())
          {
              for(NewTrain newTrain: response.body()) {
                  t.append(String.valueOf(newTrain.getResponse_code()));
              }
          }
      }

      @Override
      public void onFailure(Call<NewTrain> call, Throwable t) {
          Toast.makeText(getApplicationContext(),t.getMessage(),Toast.LENGTH_LONG).show();

      }
  });

}

希望这会起作用。