Kotlin Gson 将 json 转换为分层类对象

问题描述 投票:0回答:0

我读了 API 的响应,它返回一个像这样的 JSON 对象

{
    "companies": [{
        "id": 9,
        "label": "Name A"
    }, {
        "id": 13,
        "label": "Name B"
    }, {
        "id": 14,
        "label": "Name C"
    }],
    "types": [{
        "id": 1,
        "label": "Music"
    }, {
        "id": 2,
        "label": "Theater"
    }],
    "shows": [{
        "id": 1,
        "company": 9,
        "label": "Label XX",
        "type": 1
    }, {
        "id": 2,
        "company": 13,
        "label": "Label YY",
        "type": 1
    }, {
        "id": 3,
        "company": 14,
        "label": "Label ZZ",
        "type": 2
    }]
}

我有很多课

class ReponseApi {
    lateinit var companies: List<Company>
    lateinit var types: List<TypeShow>
    lateinit var shows: List<Show>
}

class Company {
    var id:Int = 0
    lateinit var label:String
}

class TypeShow {
    var id:Int = 0
    lateinit var label:String
}

class Show {
    var id:Int = 0
    lateinit var company: Company
    lateinit var label:String
    lateinit var type: TypeShow
}

最后关联的 Gson().fromJson

val apiData = Gson().fromJson(strResponse, ReponseApi::class.java)

我有以下错误:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NUMBER at line 1

我知道 Kotlin 无法在 ID 为 9 的“Company”对象与具有属性“company”和 Int 值“9”的“Show”对象之间建立链接。

我尝试了一些类似构建“公司”数组的方法,并在“Show”类的构造函数中找到了一个好的,但是......我认为有一种更简单和更清晰的方法来做到这一点。

我想我需要一个 TypeAdapter in fromJson 但我坚持使用正确的语法。

感谢您的帮助

kotlin gson
© www.soinside.com 2019 - 2024. All rights reserved.