Доступ к глубоко вложенному массиву JSON с помощью Moshi / Retrofit2 - PullRequest
0 голосов
/ 28 сентября 2018

Все, что мне нужно, это массив "фото".Мой 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 ]

0 голосов
/ 20 октября 2018

К сожалению, аннотация @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
)
0 голосов
/ 28 сентября 2018

попробуйте это!

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/

...