Доступ к глубоко вложенному массиву JSON с помощью Moshi/Retrofit2
Все, что мне нужно, это массив "фото". Мой 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. Я видел это, но я пока не совсем понимаю, как заставить это работать. Я думал, что мог бы сделать что-то быстрое и грязное, чтобы получить нужные мне значения, чтобы я мог продолжить создавать свое приложение (я вернусь позже для правильной реализации).
Моя быстрая и грязная идея заключалась в следующем:
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 и взять элементы галереи. Там нет сбоев, но это не правильно разбора. Я получаю объект "Фото", но "Фото" - ноль.
Есть мысли о том, как получить доступ к нужным мне данным?
2 ответа
К сожалению, @Json
аннотация игнорируется в классах Kotlin. Обходной путь (по ссылке, которую я только что дал) заключается в использовании @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
)
Попробуй это!
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
Вы можете легко создать Pojo из JSON с помощью этого инструмента. Посетите этот сайт. http://www.jsonschema2pojo.org/