使用 Moshi/Retrofit2 访问深度嵌套的 JSON 数组
Accessing deeply nested JSON array with Moshi/Retrofit2
我只需要 "photo" 数组。我的 JSON 看起来像这样:
{
"photos": {
"page": 1,
"pages": "1000",
"perpage": 1,
"total": "1000",
"photo": [
{
"id": "44049202615",
"owner": "159796861@N07",
"secret": "cb8f476a4d",
"server": "1958",
"farm": 2,
"title": "Murugan",
"ispublic": 1,
"isfriend": 0,
"isfamily": 0
}
]
},
"stat": "ok"
}
我是 Moshi/Retrofit 的新手。我看到了 this 但我还不太明白如何让它发挥作用。我想我可以做一些快速而肮脏的事情来获得我需要的值,这样我就可以继续构建我的应用程序(我稍后会回来进行正确的实施)。
我的想法是这样的:
data class GalleryItem(@Json(name = "title") val caption: String,
@Json(name = "id") val id: String,
@Json(name = "url_s") val url: String?)
data class Photo(@Json(name = "photo") val galleryItems: List<GalleryItem>)
data class Photos(@Json(name = "photos") val photo: Photo)
我想我可以从我的 api 中 return 一个 "Photos" 并获取画廊项目。没有崩溃,但解析不正确。我得到 "Photos" 对象,但 "Photo" 为空。
关于如何访问我需要的数据有什么想法吗?
试试这个!
data class Response(
@Json(name = "photos")
val photos: Photos,
@Json(name = "stat")
val stat: String
)
data class Photos(
@Json(name = "page")
val page: Int,
@Json(name = "pages")
val pages: String,
@Json(name = "photo")
val photosList: List<Photo>
)
data class Photo(
val id: String,
val owner: String
)
现在您可以使用
访问照片列表
response.photos.photosList
您可以使用此工具从 json 轻松创建 pojo。访问这个网站。
http://www.jsonschema2pojo.org/
不幸的是,@Json
注释 gets ignored in Kotlin classes。解决方法(来自我刚刚给出的 link)是改用 @field:Json
。为您的数据尝试这样的事情 类:
data class ResponseData(
val photos: Photos
)
data class Photos(
@field:Json(name = "photo") val galleryItems: List<GalleryItem>
)
data class GalleryItem(
val id: String,
val title: String
)
我只需要 "photo" 数组。我的 JSON 看起来像这样:
{
"photos": {
"page": 1,
"pages": "1000",
"perpage": 1,
"total": "1000",
"photo": [
{
"id": "44049202615",
"owner": "159796861@N07",
"secret": "cb8f476a4d",
"server": "1958",
"farm": 2,
"title": "Murugan",
"ispublic": 1,
"isfriend": 0,
"isfamily": 0
}
]
},
"stat": "ok"
}
我是 Moshi/Retrofit 的新手。我看到了 this 但我还不太明白如何让它发挥作用。我想我可以做一些快速而肮脏的事情来获得我需要的值,这样我就可以继续构建我的应用程序(我稍后会回来进行正确的实施)。
我的想法是这样的:
data class GalleryItem(@Json(name = "title") val caption: String,
@Json(name = "id") val id: String,
@Json(name = "url_s") val url: String?)
data class Photo(@Json(name = "photo") val galleryItems: List<GalleryItem>)
data class Photos(@Json(name = "photos") val photo: Photo)
我想我可以从我的 api 中 return 一个 "Photos" 并获取画廊项目。没有崩溃,但解析不正确。我得到 "Photos" 对象,但 "Photo" 为空。
关于如何访问我需要的数据有什么想法吗?
试试这个!
data class Response(
@Json(name = "photos")
val photos: Photos,
@Json(name = "stat")
val stat: String
)
data class Photos(
@Json(name = "page")
val page: Int,
@Json(name = "pages")
val pages: String,
@Json(name = "photo")
val photosList: List<Photo>
)
data class Photo(
val id: String,
val owner: String
)
现在您可以使用
访问照片列表response.photos.photosList
您可以使用此工具从 json 轻松创建 pojo。访问这个网站。 http://www.jsonschema2pojo.org/
不幸的是,@Json
注释 gets ignored in Kotlin classes。解决方法(来自我刚刚给出的 link)是改用 @field:Json
。为您的数据尝试这样的事情 类:
data class ResponseData(
val photos: Photos
)
data class Photos(
@field:Json(name = "photo") val galleryItems: List<GalleryItem>
)
data class GalleryItem(
val id: String,
val title: String
)