燃料,Kotlin,Gson,预计BEGIN_ARRAY但在第1行是BEGIN_OBJECT

时间:2017-12-07 09:39:21

标签: java android kotlin gson

我试图像这样解析一个JSON字符串:

{
    "count": 1,
    "items": [
        {
            "organization_id": 6972979,
            "organization_name": "Lorem ipsum dolor sit amet, consectetur adipisicing elit",
        }
    ]
}

和Kotlin班:

class LoremModel {
    var count: Int? = null
    var items: List<Lorem>? = null

    class Lorem {
        var organization_id: Int? = null
        var organization_name: String? = null

        constructor(organization_id: Int?,  organization_name: String?) {
            this.organization_id = organization_id
            this.organization_name = organization_name
        }
    }

    class ListDeserializer : ResponseDeserializable<List<LoremModel>> {
        override fun deserialize(content: String) = Gson().fromJson<List<LoremModel>>(content, object : TypeToken<List<LoremModel>>() {}.type)
    }
}

燃料部分:

Fuel.get("/lorem/search", listOf("keywords" to  keyword, "category" to category, "pageNum" to "1", "pageSize" to "10")).
        responseObject(LoremModel.ListDeserializer()) { request, _, item ->
        }

但是我收到了一个错误:

  

[失败:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY但在第1行第2行路径为BEGIN_OBJECT $]

我该如何解决?

1 个答案:

答案 0 :(得分:2)

你的json

{
    "count": 1,
    "items": [
        {
            "organization_id": 6972979,
            "organization_name": "Lorem ipsum dolor sit amet, consectetur adipisicing elit",
        }
    ]
}

表示JSON对象而不是JSON数组。

因此,不要尝试将其反序列化为List LoremModelGson().fromJson<List<LoremModel>>(content, object : TypeToken<List<LoremModel>>() {}.type) 个对象

LoremModel

您应该将其反序列化为Gson().fromJson(content, LoremModel::class.java) 类型的对象。所以你可以这样做:

$('.tabs-container.active video')[0].play();