有一些搜索请求在其字段中返回包含不同模型的 JSON。
例子
{
"resultCount":13,
"results": [
{"wrapperType":"collection", "collectionType":"Album", "artistId":40876509, "collectionId":259510974, "amgArtistId":310510, "artistName":"D+", "collectionName":"Dandelion Seeds", "collectionCensoredName":"Dandelion Seeds", "artistViewUrl":"https://music.apple.com/us/artist/d/40876509?uo=4", "collectionViewUrl":"https://music.apple.com/us/album/dandelion-seeds/259510974?uo=4", "artworkUrl60":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/60x60bb.jpg", "artworkUrl100":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/100x100bb.jpg", "collectionPrice":9.99, "collectionExplicitness":"notExplicit", "trackCount":12, "copyright":"℗ 1998 K Records", "country":"USA", "currency":"USD", "releaseDate":"2007-09-04T07:00:00Z", "primaryGenreName":"Alternative"},
{"wrapperType":"track", "kind":"song", "artistId":40876509, "collectionId":259510974, "trackId":259511004, "artistName":"D+", "collectionName":"Dandelion Seeds", "trackName":"Cut It Out", "collectionCensoredName":"Dandelion Seeds", "trackCensoredName":"Cut It Out", "artistViewUrl":"https://music.apple.com/us/artist/d/40876509?uo=4", "collectionViewUrl":"https://music.apple.com/us/album/cut-it-out/259510974?i=259511004&uo=4", "trackViewUrl":"https://music.apple.com/us/album/cut-it-out/259510974?i=259511004&uo=4",
"previewUrl":"https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview71/v4/4e/fc/93/4efc93a5-f3f0-0c7e-ed14-68cb6b6d6fbd/mzaf_5721197462467928771.plus.aac.p.m4a", "artworkUrl30":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/30x30bb.jpg", "artworkUrl60":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/60x60bb.jpg", "artworkUrl100":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/100x100bb.jpg", "collectionPrice":9.99, "trackPrice":0.99, "releaseDate":"1998-08-25T12:00:00Z", "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "discCount":1, "discNumber":1, "trackCount":12, "trackNumber":1, "trackTimeMillis":236187, "country":"USA", "currency":"USD", "primaryGenreName":"Alternative", "isStreamable":true},
{"wrapperType":"track", "kind":"song", "artistId":40876509, "collectionId":259510974, "trackId":259511045, "artistName":"D+", "collectionName":"Dandelion Seeds", "trackName":"Green Party", "collectionCensoredName":"Dandelion Seeds", "trackCensoredName":"Green Party", "artistViewUrl":"https://music.apple.com/us/artist/d/40876509?uo=4", "collectionViewUrl":"https://music.apple.com/us/album/green-party/259510974?i=259511045&uo=4", "trackViewUrl":"https://music.apple.com/us/album/green-party/259510974?i=259511045&uo=4", "previewUrl":"https://audio-ssl.itunes.apple.com/itunes-assets/Music/v4/eb/c7/6a/ebc76a4f-3825-8060-f781-a0f36532f198/mzaf_876283245701275269.plus.aac.p.m4a", "artworkUrl30":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/30x30bb.jpg", "artworkUrl60":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/60x60bb.jpg", "artworkUrl100":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/100x100bb.jpg", "collectionPrice":9.99, "trackPrice":0.99, "releaseDate":"1998-08-25T12:00:00Z", "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "discCount":1, "discNumber":1, "trackCount":12, "trackNumber":2, "trackTimeMillis":170587, "country":"USA", "currency":"USD", "primaryGenreName":"Alternative", "isStreamable":true},
{"wrapperType":"track", "kind":"song", "artistId":40876509, "collectionId":259510974, "trackId":259511130, "artistName":"D+", "collectionName":"Dandelion Seeds", "trackName":"Don't Worry About Me", "collectionCensoredName":"Dandelion Seeds", "trackCensoredName":"Don't Worry About Me", "artistViewUrl":"https://music.apple.com/us/artist/d/40876509?uo=4", "collectionViewUrl":"https://music.apple.com/us/album/dont-worry-about-me/259510974?i=259511130&uo=4", "trackViewUrl":"https://music.apple.com/us/album/dont-worry-about-me/259510974?i=259511130&uo=4", "previewUrl":"https://audio-ssl.itunes.apple.com/itunes-assets/Music/v4/00/79/54/007954d4-c7f7-8900-cf96-1173ca7f608f/mzaf_5029393603193854925.plus.aac.p.m4a", "artworkUrl30":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/30x30bb.jpg", "artworkUrl60":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/60x60bb.jpg", "artworkUrl100":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/100x100bb.jpg", "collectionPrice":9.99, "trackPrice":0.99, "releaseDate":"1998-08-25T12:00:00Z", "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "discCount":1, "discNumber":1, "trackCount":12, "trackNumber":3, "trackTimeMillis":227293, "country":"USA", "currency":"USD", "primaryGenreName":"Alternative", "isStreamable":true},
{"wrapperType":"track", "kind":"song", "artistId":40876509, "collectionId":259510974, "trackId":259511261, "artistName":"D+", "collectionName":"Dandelion Seeds", "trackName":"Dandelion Wine", "collectionCensoredName":"Dandelion Seeds", "trackCensoredName":"Dandelion Wine", "artistViewUrl":"https://music.apple.com/us/artist/d/40876509?uo=4", "collectionViewUrl":"https://music.apple.com/us/album/dandelion-wine/259510974?i=259511261&uo=4", "trackViewUrl":"https://music.apple.com/us/album/dandelion-wine/259510974?i=259511261&uo=4",
"previewUrl":"https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview62/v4/bd/42/36/bd423652-c476-10f5-a1f5-383adfa56eb4/mzaf_1251229812831649846.plus.aac.p.m4a", "artworkUrl30":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/30x30bb.jpg", "artworkUrl60":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/60x60bb.jpg", "artworkUrl100":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/100x100bb.jpg", "collectionPrice":9.99, "trackPrice":0.99, "releaseDate":"1998-08-25T12:00:00Z", "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "discCount":1, "discNumber":1, "trackCount":12, "trackNumber":4, "trackTimeMillis":231653, "country":"USA", "currency":"USD", "primaryGenreName":"Alternative", "isStreamable":true},
{"wrapperType":"track", "kind":"song", "artistId":40876509, "collectionId":259510974, "trackId":259511347, "artistName":"D+", "collectionName":"Dandelion Seeds", "trackName":"Profits Are Soaring", "collectionCensoredName":"Dandelion Seeds", "trackCensoredName":"Profits Are Soaring", "artistViewUrl":"https://music.apple.com/us/artist/d/40876509?uo=4", "collectionViewUrl":"https://music.apple.com/us/album/profits-are-soaring/259510974?i=259511347&uo=4", "trackViewUrl":"https://music.apple.com/us/album/profits-are-soaring/259510974?i=259511347&uo=4", "previewUrl":"https://audio-ssl.itunes.apple.com/itunes-assets/Music/v4/35/f3/46/35f34609-4e71-ae71-355b-c6ac72181730/mzaf_5686900859081999102.plus.aac.p.m4a", "artworkUrl30":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/30x30bb.jpg", "artworkUrl60":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/60x60bb.jpg", "artworkUrl100":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/100x100bb.jpg", "collectionPrice":9.99, "trackPrice":0.99, "releaseDate":"1998-08-25T12:00:00Z", "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "discCount":1, "discNumber":1, "trackCount":12, "trackNumber":5, "trackTimeMillis":249600, "country":"USA", "currency":"USD", "primaryGenreName":"Alternative", "isStreamable":true},
{"wrapperType":"track", "kind":"song", "artistId":40876509, "collectionId":259510974, "trackId":259511409, "artistName":"D+", "collectionName":"Dandelion Seeds", "trackName":"Rusted", "collectionCensoredName":"Dandelion Seeds", "trackCensoredName":"Rusted", "artistViewUrl":"https://music.apple.com/us/artist/d/40876509?uo=4", "collectionViewUrl":"https://music.apple.com/us/album/rusted/259510974?i=259511409&uo=4", "trackViewUrl":"https://music.apple.com/us/album/rusted/259510974?i=259511409&uo=4", "previewUrl":"https://audio-ssl.itunes.apple.com/itunes-assets/Music2/v4/8b/33/67/8b336773-9747-cafe-a624-2ea18a8069a6/mzaf_2729424859737659172.plus.aac.p.m4a", "artworkUrl30":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/30x30bb.jpg", "artworkUrl60":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/60x60bb.jpg", "artworkUrl100":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/100x100bb.jpg", "collectionPrice":9.99, "trackPrice":0.99, "releaseDate":"1998-08-25T12:00:00Z", "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "discCount":1, "discNumber":1, "trackCount":12, "trackNumber":6, "trackTimeMillis":316987, "country":"USA", "currency":"USD", "primaryGenreName":"Alternative", "isStreamable":true},
{"wrapperType":"track", "kind":"song", "artistId":40876509, "collectionId":259510974, "trackId":259511510, "artistName":"D+", "collectionName":"Dandelion Seeds", "trackName":"My Best Day", "collectionCensoredName":"Dandelion Seeds", "trackCensoredName":"My Best Day", "artistViewUrl":"https://music.apple.com/us/artist/d/40876509?uo=4", "collectionViewUrl":"https://music.apple.com/us/album/my-best-day/259510974?i=259511510&uo=4", "trackViewUrl":"https://music.apple.com/us/album/my-best-day/259510974?i=259511510&uo=4", "previewUrl":"https://audio-ssl.itunes.apple.com/itunes-assets/Music/v4/41/4c/a7/414ca717-b07d-b927-9ffa-8da8a231f2ac/mzaf_3343910103798289777.plus.aac.p.m4a", "artworkUrl30":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/30x30bb.jpg", "artworkUrl60":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/60x60bb.jpg", "artworkUrl100":"https://is4-ssl.mzstatic.com/image/thumb/Music/v4/67/d1/18/67d11843-724e-f40b-34ba-f94f087909c3/source/100x100bb.jpg", "collectionPrice":9.99, "trackPrice":0.99, "releaseDate":"1998-08-25T12:00:00Z", "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "discCount":1, "discNumber":1, "trackCount":12, "trackNumber":7, "trackTimeMillis":188480, "country":"USA", "currency":"USD", "primaryGenreName":"Alternative", "isStreamable":true},
{"wrapperType":"track", "kind":"song", "artistId":40876509, "collectionId":259510974, "trackId":259511537, "artistName":"D+", "collectionName":"Dandelion Seeds", "trackName":"His Heels", "collectionCensoredName":"Dandelion Seeds", "trackCensoredName":"His Heels", "artistViewUrl":"https://music.apple.com/us/artist/d/40876509?uo=4", "collectionViewUrl":"https://music.apple.com/us/album/his-heels/259510974?i=259511537&uo=4", "trackViewUrl":"https://music.apple.com/us/album/his-heels/259510974?i=259511537&uo=4",
这种情况下如何发送请求,后面又如何解析呢?
fun getAlbumAndSongs(
@Query("id") collectionId : Long,
@Query("entity") entity: String = "songs"
) : Response<BaseResponse<T>>
用什么来代替T?我不能指定 2 个不同的型号?
data class BaseResponse<T>(
val resultCount : Int,
val results : List<T>
)
更新
val baseEntity = body.results.map {
gson.fromJson(it.toString(), BaseEntity::class.java)
}
因错误而崩溃
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 142 path $.collectionName
CollectionTrack这是您存储相应对象的数据类注意:如果使用 Gson 解析 Json,建议解决方案。
班级结构:
Gson 初始化:
适配器:
服务器响应代码:
获取数据:
解决方案非常难看,写在膝盖上,所以我强烈建议改进它。如果您可以改进(或找到更好的) - 请补充此答案。
您可以尝试将属性存储在关联列表中。
例子:
用法:
PS 拐杖当然还是一样的,但是好像比上一个答案要容易一点。
PPS 我的意见 - 重新制作 API 以在不同的数组中返回不同的模型会更好
PPPS 增加了 List 的扩展功能,使用起来似乎更方便了。