为什么Kotlin不处理我的阵列列表

时间:2019-03-21 17:01:46

标签: android kotlin

我正在用Kotlin代码从json api获取数据。我可以正确解析数据以获取字符串值,但是解析数组列表会导致问题。

我的回复数据如下

{
    "limit": "10",
    "schedule": {
        "0": ["0", "3.00", "7.59", "9.00", "12.59", "14.00", "22.59"],
        "1": ["1", "3.00", "7.59", "9.00", "12.59", "14.00", "22.59"],
        "2": ["2", "3.00", "7.59", "9.00", "12.59", "14.00", "22.59"],
        "3": ["3", "3.00", "7.59", "9.00", "12.59", "14.00", "22.59"],
        "4": ["4", "3.00", "7.59", "9.00", "12.59", "14.00", "22.59"],
        "5": ["5", "3.00", "7.59", "9.00", "12.59", "14.00", "22.59"],
        "6": ["6", "3.00", "7.59", "9.00", "12.59", "14.00", "22.59"]
    },
    "target_temp": "32.18"
}

现在要检索值,例如target_temp我正在成功使用以下代码

val gson = GsonBuilder().create() 
 val target = gson.fromJson(body, data::class.java)        println(target.target_temp)

我的班级代码很简单

class data(val target_temp: String)

现在,当我想访问时间表时,我得到了错误消息。

  

java.lang.IllegalStateException:应为BEGIN_ARRAY,但在第1行第50列路径$ .schedule中为BEGIN_OBJECT

我的检索时间表的代码如下。

val gson = GsonBuilder().create()
val schedule = gson.fromJson(body, schedule::class.java)
println(schedule.schedule.get(1))

计划的班级是

class schedule(val schedule: ArrayList<String>)

2 个答案:

答案 0 :(得分:1)

在您的响应模型中,设置schedule变量数据类型Map<String, List<String>>而不是ScheduleobjectList<String>

您的响应模型如下所示

data class ResponseModel(
   val schedule: Map<String, List<String>>,
   val target_temp: String
)

答案 1 :(得分:1)

计划的类型不是ArrayList<String的类型Map<ArrayList<String>>

将时间表的定义更改为:

class schedule(val schedule: Map<String, ArrayList<String>>)

完整示例:

val gson = GsonBuilder().create()
val schedule = gson.fromJson(body, schedule::class.java)
println(schedule.schedule.get("0"))