莫西将嵌套的JSON值映射到字段中。

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

有什么方法可以将嵌套的JSON值映射到字段而不需要额外的类?我有一个JSON响应

{
    "title": "Warriors",
    "artist": "Imagine Dragons",
    "apple_music": {
        "url": "https://music.apple.com/us/album/warriors/1440831203?app=music&at=1000l33QU&i=1440831624&mt=1",
        "discNumber": 1,
        "genreNames": [
            "Alternative",
            "Music"
        ],
    }
}

但从 apple_music 我只需要 url 值。所以我决定创建Kotlin数据类,并尝试了用 @Json 注释

data class Song(
    val title: String,
    val artist: String,
    @Json(name = "apple_music.url")
    val appleMusicUrl: String
)

然而,这并不奏效。它在运行时抛出一个异常

Required value 'appleMusicUrl' (JSON name 'apple_music.url') missing at $

下面的代码可以使用

data class Song(
    val title: String,
    val artist: String,
    @Json(name = "apple_music")
    val appleMusic: AppleMusic
)

data class AppleMusic(val url: String)

我有几个嵌套的值,为它们创建额外的类是相当夸张的。有没有比创建嵌套类更好的方法呢?apple_music 节点?

android json kotlin retrofit2 moshi
1个回答
0
投票

你可以通过以下方式来实现这一点 使用@JsonQualifier的交替类型适配器。. 例如:

@Retention(RUNTIME)
@JsonQualifier
annotation class AppleMusicUrl

data class Song(
    val title: String,
    val artist: String,
    @AppleMusicUrl
    val appleMusicUrl: String
)

@FromJson
@AppleMusicUrl
fun fromJson(json: Map<String, Any?>): String {
    return json.getValue("url") as String
}
© www.soinside.com 2019 - 2024. All rights reserved.