如何在 moshi (kotlin) 中解析 LinkedHashMap

Posted

技术标签:

【中文标题】如何在 moshi (kotlin) 中解析 LinkedHashMap【英文标题】:How to parse LinkedHashMap in moshi (kotlin) 【发布时间】:2021-05-15 11:14:42 【问题描述】:

我正在尝试为以下 json 创建一个 JSON 适配器


    "message": 
        "affenpinscher": [],
        "african": [],
        "airedale": [],
        "akita": [],
        "appenzeller": [],
        "australian": [
            "shepherd"
        ]
    ,
    "status": "success"

我已经尝试了以下

@JsonClass(generateAdapter = true)
data class BreedList(
    val message: HashMap<String,List<String>> = HashMap<String,List<String>>()
)

@JsonClass(generateAdapter = true)
data class BreedList(
    val message: Breed
)
@JsonClass(generateAdapter = true)
data class Breed(
    val breed: List<String>
)

但这两种情况都给我错误,有没有办法解析以下对象,我需要键以及响应中的列表

【问题讨论】:

【参考方案1】:

无需创建自定义适配器。

解析您发布的 JSON:

data class Base (

    @field:Json(name = "message")
    val message : Message,

    @field:Json(name = "status")
    val status : String

)

data class Message (

    @field:Json(name = "affenpinscher")
    val affenpinscher : List<String>,

    @field:Json(name = "african") 
    val african : List<String>,

    @field:Json(name = "airedale")
    val airedale : List<String>,

    @field:Json(name = "akita")
    val akita : List<String>,

    @field:Json(name = "appenzeller") 
    val appenzeller : List<String>,

    @field:Json(name = "australian")
    val australian : List<String>

)

注意:您可以使用您需要的任何数据类型或创建自定义类,如 Message,而不是 String

【讨论】:

以上是关于如何在 moshi (kotlin) 中解析 LinkedHashMap的主要内容,如果未能解决你的问题,请参考以下文章

Moshi:解析单个对象或对象列表(kotlin)

如何在 Moshi 中跳过 JSON 属性?

Moshi 忽略 Kotlin 中的字段

Kotlin Retrofit Moshi:不返回任何内容

如何使用带有 Kotlin 的 Room 和 moshi 持久化带有 JSON 数组的 JSON 对象

Moshi 的 Kotlin 代码生成器有啥用?