【问题标题】:Create Json array of strings without key through data class in kotlin通过kotlin中的数据类创建没有键的Json字符串数组
【发布时间】:2025-12-09 07:10:01
【问题描述】:

我正在通过 kotlin 的“数据”类创建一个 json 请求对象。我坚持一个点,我必须创建一个没有键的 JSON 字符串数组,如下所示:

"filters": {
                "abc": [{
                    "key1": "exRKxYXS5uAjW8hTs",
                    "key2": ["Premium"]
                }],
                "genders": ["MALE", "FEMALE"],
                "def": ["en", "fr"]
            }

在这里,我坚持使用性别和 def jsonarrays,我只需要在其中放置字符串,但是我们如何在 kotlin 中创建它的数据类。请提出建议。

提前致谢。

【问题讨论】:

  • 这不是一个有效的 json 格式
  • 性别是 List 的一种。 def 和 key2 同样适用。

标签: android json kotlin


【解决方案1】:

使用 jsonschema2pojo.com 自动生成正确的类。

响应类

class Response {
    @SerializedName("filters")
    @Expose
    var filters: Filters? = null
}

过滤器类

class Filters {
    @SerializedName("abc")
    @Expose
    var abc: List<Abc>? = null

    @SerializedName("genders")
    @Expose
    var genders: List<String>? = null

    @SerializedName("def")
    @Expose
    var def: List<String>? = null
}

Abc 类

class Abc {
    @SerializedName("key1")
    @Expose
    var key1: String? = null

    @SerializedName("key2")
    @Expose
    var key2: List<String>? = null
}

【讨论】:

    【解决方案2】:

    您可以创建相应的数据类如下:

    //Response data class
    data class Response(
        val filters: Filters?
    )
    
    //Filters data class
    data class Filters(
        val abc: Abc,
        val genders: List<String> = emptyList(),
        val def: List<String> = emptyList()
    )
    
    //Abc data class
    data class Abc(
        val key1: String?,
        val key2: String?
    )
    

    您不必使用 @SerializedName,只要您保持变量名与键名相同即可。

    【讨论】: