2017-12-30 4 views
0

며칠 지난이 문제를 직시하고 있습니다. 어떤 사람이이 문제를 확인합니까? 어떤 도움을 주시면 감사하겠습니다. 어떻게이 문제를 해결할 수 있습니까?GSON 던지기 예상 BEGIN_OBJECT했지만 BEGIN_ARRAY

GSON 예상 BEGIN_OBJECT를 던지고 있지만 BEGIN_ARRAY

override fun onSuccess(str_SUCCESS: String) 
    { 
     System.out.println("JSON_IS"+str_SUCCESS) 

     val paymentScheduleModel = Gson().fromJson<PaymentScheduleModel>(str_SUCCESS, PaymentScheduleModel::class.java) // Problem here 

    } 

JSON 응답에서 오는

문제가되었다

{ 
    "status": { 
    "statusCode": 10016, 
    "isSuccess": true, 
    "message": "Success" 
    }, 
    "data": { 
    "payback_schedule": [ 
     { 
     "id": 2, 
     "paid_amount": "INR NaN", 
     "paidStatus": "Upcoming Payback", 
     "paid_status": "P", 
     "s_date": "05/01/2018 12:31:10", 
     "e_date": "11/01/2018 12:31:10", 
     "current_balance": "INR 399", 
     "payanytime_button_status": "active", 
     "btnColor": "red", 
     "btnHexColor": "#D2322D" 
     }, 
     { 
     "id": 3, 
     "paid_amount": "INR NaN", 
     "paidStatus": "Upcoming Payback", 
     "paid_status": "P", 
     "s_date": "12/01/2018 12:31:10", 
     "e_date": "18/01/2018 12:31:10", 
     "current_balance": "INR 399", 
     "payanytime_button_status": "active", 
     "btnColor": "red", 
     "btnHexColor": "#D2322D" 
     } 
    ] 
    } 
} 

PaymentScheduleMo입니다 del

data class PaymentScheduleModel(@SerializedName("payback_schedule") val payback_schedule: PaymentSchedule) 

data class PaymentSchedule 

         (@SerializedName("id") val id: Int, 
         @SerializedName("paid_amount") val paid_amount:String, 
         @SerializedName("paidStatus") val paidStatus:String, 
         @SerializedName("paid_status") val paid_status:String, 
         @SerializedName("s_date") val s_date:String, 
         @SerializedName("e_date") val e_date:String, 
         @SerializedName("current_balance") val current_balance:String, 
         @SerializedName("payanytime_button_status") val payanytime_button_status:String, 
         @SerializedName("btnColor") val btnColor:String, 
         @SerializedName("btnHexColor") val btnHexColor:String) 
+0

Hello @Kankana, 모델 클래스가 적합하지 않습니다. 생성 모델 클래스에는 gson converter 또는 pojo generator를 사용하십시오. –

+0

JSON'payback_schedule'을 보면 객체가 아닌 배열입니다. https://stackoverflow.com/a/45605731/4693278에 도움이됩니다. –

답변

0

모델 개체가 Json과 일치하지 않습니다.

당신은 유형 PaymentSchedule의 하위 개체 "payback_schedule"을 가진 된 JSONObject PaymentScheduleModel을 구문 분석하려고하지만 당신은 하위 개체 하위 개체 "payback_schedule"가 무엇인가 "데이터"를 가진 된 JSONObject 있습니다. 그래서 정말로, "데이터"블록을 파싱하고 싶습니다.

1 :

두 가지 옵션이 데이터 블록을 감싸고 다른 모델을 작성하고 분석 :

data class PaymentScheduleData(@SerializedName("data") val payback_schedule_model: PaymentScheduleModel) 

override fun onSuccess(str_SUCCESS: String) { 
    val paymentScheduleData = Gson().fromJson<PaymentScheduleData>(str_SUCCESS, PaymentScheduleData::class.java) 
    // Now use paymentScheduleData.payback_schedule_model 
} 

2 : 먼저 데이터 부분을 잡아 당겨, ​​다음 구문 분석 :

override fun onSuccess(str_SUCCESS: String) { 
    // Get the root JsonObject 
    val jsonObject = Gson().fromJson<JsonObject>(str_SUCCESS, JsonObject::class.java) 

    // Get the "data" block that matches the model and parse that 
    val paymentScheduleModel = Gson().fromJson<PaymentScheduleModel>(jsonObject.getAsJsonObject("data"), PaymentScheduleModel::class.java) 
} 

희망이 도움이됩니다.

0

payback_schedule에 object 대신 배열이 들어 있다고 오류가 표시됩니다. 따라서 payback_schedulePaymentSchedule 대신 Array<PaymentSchedule>이어야합니다.

data class PaymentScheduleModel(@SerializedName("payback_schedule") val payback_schedule: Array<PaymentSchedule>) 

ps. 기본 구현 인 Arrayequals() 함수가 referential equality을 비교하기 때문에 데이터 클래스에 Array이 포함 된 경우 자신의 equals()hashCode() 함수를 구현하는 것이 좋습니다. 추천 읽기 : Equals method for data class in kotlin