2017-09-08 4 views
0

여기 내 Json 데이터입니다. ]Retrofit2를 사용하여 JsonArray가 다른 JsonArray에 중첩 될 때 deserialize하는 방법

[ 
{ 
    "id": 280866, 
    "student_id": 7, 
    "lesson_date_id": 31476, 
    "recorded_time": "11:49:55", 
    "lecturer_id": null, 
    "status": 12895, 
    "created_at": "2017-07-31 11:49:55", 
    "updated_at": null, 
    "lesson_date": { 
     "id": 31476, 
     "lesson_id": 28, 
     "ldate": "2017-07-31", 
     "updated_by": 1, 
     "created_at": "2017-04-19 03:33:43", 
     "updated_at": null 
    }, 
    "lecturer": null, 
    "lesson": { 
     "id": 28, 
     "semester": "2", 
     "module_id": "009521", 
     "subject_area": "IS PDA", 
     "catalog_number": "7COMISS", 
     "class_section": "T03", 
     "component": "TUT", 
     "facility": "05-04-0009", 
     "venue_id": 2, 
     "weekday": "2", 
     "start_time": "08:00:00", 
     "end_time": "12:00:00", 
     "meeting_pattern": "", 
     "created_at": "0000-00-00 00:00:00", 
     "updated_at": "2017-07-10 10:19:51", 
     "lesson_name": null, 
     "credit_unit": null 
    } 
}, 
{ 
    "id": 284077, 
    "student_id": 6, 
    "lesson_date_id": 31476, 
    "recorded_time": "00:00:24", 
    "lecturer_id": null, 
    "status": -1, 
    "created_at": "2017-08-01 00:00:23", 
    "updated_at": null, 
    "lesson_date": { 
     "id": 31476, 
     "lesson_id": 28, 
     "ldate": "2017-07-31", 
     "updated_by": 1, 
     "created_at": "2017-04-19 03:33:43", 
     "updated_at": null 
    }, 
    "lecturer": null, 
    "lesson": { 
     "id": 28, 
     "semester": "2", 
     "module_id": "009521", 
     "subject_area": "IS PDA", 
     "catalog_number": "7COMISS", 
     "class_section": "T03", 
     "component": "TUT", 
     "facility": "05-04-0009", 
     "venue_id": 2, 
     "weekday": "2", 
     "start_time": "08:00:00", 
     "end_time": "12:00:00", 
     "meeting_pattern": "", 
     "created_at": "0000-00-00 00:00:00", 
     "updated_at": "2017-07-10 10:19:51", 
     "lesson_name": null, 
     "credit_unit": null 
    } 
}, 
{ 
    "id": 284076, 
    "student_id": 5, 
    "lesson_date_id": 31476, 
    "recorded_time": "00:00:24", 
    "lecturer_id": null, 
    "status": -1, 
    "created_at": "2017-08-01 00:00:23", 
    "updated_at": null, 
    "lesson_date": { 
     "id": 31476, 
     "lesson_id": 28, 
     "ldate": "2017-07-31", 
     "updated_by": 1, 
     "created_at": "2017-04-19 03:33:43", 
     "updated_at": null 
    }, 
    "lecturer": null, 
    "lesson": { 
     "id": 28, 
     "semester": "2", 
     "module_id": "009521", 
     "subject_area": "IS PDA", 
     "catalog_number": "7COMISS", 
     "class_section": "T03", 
     "component": "TUT", 
     "facility": "05-04-0009", 
     "venue_id": 2, 
     "weekday": "2", 
     "start_time": "08:00:00", 
     "end_time": "12:00:00", 
     "meeting_pattern": "", 
     "created_at": "0000-00-00 00:00:00", 
     "updated_at": "2017-07-10 10:19:51", 
     "lesson_name": null, 
     "credit_unit": null 
    } 
}, 
{ 
    "id": 284075, 
    "student_id": 4, 
    "lesson_date_id": 31476, 
    "recorded_time": "00:00:24", 
    "lecturer_id": null, 
    "status": -1, 
    "created_at": "2017-08-01 00:00:23", 
    "updated_at": null, 
    "lesson_date": { 
     "id": 31476, 
     "lesson_id": 28, 
     "ldate": "2017-07-31", 
     "updated_by": 1, 
     "created_at": "2017-04-19 03:33:43", 
     "updated_at": null 
    }, 
    "lecturer": null, 
    "lesson": { 
     "id": 28, 
     "semester": "2", 
     "module_id": "009521", 
     "subject_area": "IS PDA", 
     "catalog_number": "7COMISS", 
     "class_section": "T03", 
     "component": "TUT", 
     "facility": "05-04-0009", 
     "venue_id": 2, 
     "weekday": "2", 
     "start_time": "08:00:00", 
     "end_time": "12:00:00", 
     "meeting_pattern": "", 
     "created_at": "0000-00-00 00:00:00", 
     "updated_at": "2017-07-10 10:19:51", 
     "lesson_name": null, 
     "credit_unit": null 
    } 
}, 
{ 
    "id": 280865, 
    "student_id": 2, 
    "lesson_date_id": 31476, 
    "recorded_time": "11:49:55", 
    "lecturer_id": null, 
    "status": 12895, 
    "created_at": "2017-07-31 11:49:55", 
    "updated_at": null, 
    "lesson_date": { 
     "id": 31476, 
     "lesson_id": 28, 
     "ldate": "2017-07-31", 
     "updated_by": 1, 
     "created_at": "2017-04-19 03:33:43", 
     "updated_at": null 
    }, 
    "lecturer": null, 
    "lesson": { 
     "id": 28, 
     "semester": "2", 
     "module_id": "009521", 
     "subject_area": "IS PDA", 
     "catalog_number": "7COMISS", 
     "class_section": "T03", 
     "component": "TUT", 
     "facility": "05-04-0009", 
     "venue_id": 2, 
     "weekday": "2", 
     "start_time": "08:00:00", 
     "end_time": "12:00:00", 
     "meeting_pattern": "", 
     "created_at": "0000-00-00 00:00:00", 
     "updated_at": "2017-07-10 10:19:51", 
     "lesson_name": null, 
     "credit_unit": null 
    } 
} 

나는 내가 단지 특정 jsonArray으로 된 JSONObject를 얻을 수 Retrofit2를 사용하고 난 Retrofit2를 사용하여 내 Model.That의 수단에 lesson_datebeacon_lesson을 넣어하지 않는 경우 올바른 응답을 얻을 수 있습니다 . 하지만 또 다른 JsonArray가 lesson_date이고 beacon_lesson이 JsonArray에 중첩되어 있습니다. 하지만 내 모델에서 같은 방법을 사용하면 아무런 반응이 없으며 오류 메시지가 표시되지 않습니다.

다음은 내 Model 클래스입니다. 내가 모델의 lesson_date & beacon_lesson을 언급하는 경우

public class TimetableResult { 
    @SerializedName("id") 
    @Expose 
    private String id; 

    @SerializedName("lesson_id") 
    @Expose 
    private String lesson_id; 

    @SerializedName("lecturer_id") 
    @Expose 
    private String lecturer_id; 

    @SerializedName("lesson") 
    @Expose 
    private Lesson lesson; 

    @SerializedName("venue") 
    @Expose 
    private Venue venue; 

    @SerializedName("lesson_date") 
    @Expose 
    private LessonDate lesson_date; 

    @SerializedName("beaconLesson") 
    @Expose 
    private LessonBeacon lessonBeacon; 


    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getLesson_id() { 
     return lesson_id; 
    } 

    public void setLesson_id(String lesson_id) { 
     this.lesson_id = lesson_id; 
    } 

    public String getLecturer_id(){return lecturer_id;} 

    public void setLecturer_id(String lecturer_id){this.lecturer_id=lecturer_id;} 

    public Lesson getLesson() { 
     return lesson; 
    } 

    public void setLesson(Lesson lesson) { 
     this.lesson = lesson; 
    } 

    public LessonDate getLesson_date() { 
     return lesson_date; 
    } 

    public void setLesson_date(LessonDate lesson_date) { 
     this.lesson_date = lesson_date; 
    } 

    public Venue getVenue() { 
     return venue; 
    } 

    public void setVenue(Venue venue) { 
     this.venue = venue; 
    } 

    public LessonBeacon getLessonBeacon() { 
     return lessonBeacon; 
    } 

    public void setLessonBeacon(LessonBeacon lessonBeacon) { 
     this.lessonBeacon = lessonBeacon; 
    } 

, 그것은 내가 정보를 얻을 수 있습니다 correctly.And을 작업 할 수 있습니다. 그것은 매우 이상합니다. 여기 LessonDate Model이 있습니다.

public class LessonDate { 
@SerializedName("id") 
@Expose 
private String id; 

@SerializedName("lesson_id") 
@Expose 
private String lesson_id; 

@SerializedName("ldate") 
@Expose 
private String ldate; 

public String getId() { 
    return id; 
} 

public void setId(String id) { 
    this.id = id; 
} 

public String getLesson_id() { 
    return lesson_id; 
} 

public void setLesson_id(String lesson_id) { 
    this.lesson_id = lesson_id; 
} 

public String getLdate() { 
    return ldate; 
} 

public void setLdate(String ldate) { 
    this.ldate = ldate; 
} 

public String getDate() 
{ 
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
    Date startDate; 
    String week_day = null; 
    try 
    { 
     startDate = df.parse(ldate); 
     week_day = getWeekDay(startDate.getDay()); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

    return week_day; 
} 

private String getWeekDay(int day) 
{ 
    String strWeekDay = null; 
    switch (day) { 
     case 1: 
      strWeekDay = "Monday"; 
      break; 
     case 2: 
      strWeekDay = "Tuesday"; 
      break; 
     case 3: 
      strWeekDay = "Wednesday"; 
      break; 
     case 4: 
      strWeekDay = "Thursday"; 
      break; 
     case 5: 
      strWeekDay = "Friday"; 
      break; 
     case 6: 
      strWeekDay = "Saturday"; 
      break; 
     case 7: 
      strWeekDay = "Sunday"; 
      break; 
    } 

    return strWeekDay; 
} 

} 여기

는 BeaconUser 모델이다.

public class BeaconUser { 
@SerializedName("id") 
@Expose 
private String id; 

@SerializedName("major") 
@Expose 
private String major; 

@SerializedName("minor") 
@Expose 
private String minor; 

public String getId() { 
    return id; 
} 

public void setId(String id) { 
    this.id = id; 
} 

public String getMajor() { 
    return major; 
} 

public void setMajor(String major) { 
    this.major = major; 
} 

public String getMinor() { 
    return minor; 
} 

public void setMinor(String minor) { 
    this.minor = minor; 
} 

} 내 질문에 읽는 당신의 시간에 대한

감사합니다.

+0

제공된 데이터에는 "beaconLesson"이없고 lesson_date는 JsonArray가 아닌 JsonObject입니다. 어쩌면 "수업"과 "비콘 렛슨"의 차이가 그 이유일까요? –

답변

1

가 하나 Json-Array 당신은 다음처럼 모델 수정해야

@GET("path/to/your/data") 
List<BeaconUser> Users(); 

당신이 중첩 된 경우 JsonArrays를 사용하여 값을 얻을 수있는 여러 Json-Object의 주위에 감싸이기 때문에 내가 당신의 중첩 JsonArray를 찾을 수 없습니다 경우에도 :

Class MyModel { 
    List<MyOtherModel> data; 
} 

중첩 된 JSONArray는 모델 내의 목록입니다.

이 경우 LessonDate은 배열이 아니며 작동해야하는 또 다른 JsonObject (Object-> Object)임을 의미합니다. 다른 문제가있는 경우 예외를 게시하십시오.

+0

감사합니다. lesson_date & beacon_lesson을 List로 수정하면 문제가 없습니다. – nakko