首页 > 解决方案 > 构建 Kotlin 类以使用 Gson 将 json 响应转换为类

问题描述

我开始学习 Android 开发,目前我专注于如何使用 REST API。我正在试验的服务(电影数据库)提供了以下形式的响应:

{
    "certifications": {
        "CA": [
            {
                "certification": "G",
                "meaning": "All ages.",
                "order": 1
            },
            ...
        ],
        "NL": [
            {
                "certification": "AL",
                "meaning": "All ages.",
                "order": 1
            },
            ...
        ],
        ...
    }
}

列表中包含相当长的对象列表(CA、NL、EN 等),但所有这些对象都包含相同的内容 - 具有完全相同结构的对象列表。我尝试过的任何在线 JSON 到 Kotlin 类转换器都想为每个对象创建单独的类,这对我来说似乎很浪费。

我目前有这个课程:

class Certifications {
    var certifications: List<Country>? = null
}

class Country {
    var country: String? = null
    var ratings: List<Certification>? = null
}

class Certification {
    var certification: String? = null
    var meaning: String? = null
    var order: Int = 0
}

尝试这样做val thing = gson.fromJson(body, Certifications::class.java)会导致 Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 20 path $.certifications.

标签: androidjsonrestkotlin

解决方案


这个 :

class Certifications {
    var certifications: List<Country>? = null
}

应该是这样的:

class Certifications {
    var certifications: Map<String, <List<Certification>>? = null
}

String代码在哪里"NL"& "CA"- 或者如果你已经有一个自定义类型的适配器,你可以这样做Map<Country, <List<Certification>>- 但我不确定你是否有这个设置。


推荐阅读