繁体   English   中英

使用 Moshi/Retrofit2 访问深度嵌套的 JSON 数组

[英]Accessing deeply nested JSON array with 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 返回一个“照片”并获取图库项目。 没有崩溃,但没有正确解析。 我得到“照片”对象,但“照片”为空。

关于如何访问我需要的数据的任何想法?

不幸的是, @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

您可以使用此工具轻松地从 json 创建 pojo。 访问本网站。 http://www.jsonschema2pojo.org/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM