如何使用 Retrofit 2.0 (Kotlin) 正确解析嵌套的 JSON 对象?

Posted

技术标签:

【中文标题】如何使用 Retrofit 2.0 (Kotlin) 正确解析嵌套的 JSON 对象?【英文标题】:How can correctly parse nested JSON Object using Retrofit 2.0 (Kotlin)? 【发布时间】:2019-07-30 18:24:51 【问题描述】:

以下 JSON 对象是我从服务器接收到的(获取请求)。我需要获取坐标值(纬度、经度)


    "loc": 
        "type": "Point",
        "coordinates": [
            -47.0487786,
            -22.9001656
        ]
    ,
    "city": "New Jersey",
    "name": "John Doe",
    "_id": "5c7958b3e3234b3472d9917d"

我正在尝试使用以下 Poko (Kotlin):

package com.zowye.API.Models

import com.google.gson.annotations.SerializedName


class Salao
    (
    @SerializedName("loc") var coordinate:  , // not sure about the type
    var city: String?,
    var name: String?
)

如何解析它? 谢谢。

【问题讨论】:

您尝试过使用 Gson 吗?它是一个流行的库,可用于自动将 json 映射到数据模型。 【参考方案1】:

再添加一个代表被测对象类型的类Location。

    package com.zowye.API.Models

    import com.google.gson.annotations.SerializedName


    class Location (
        var type: String?,
        var coordinates: Float[]?
    )

    class Salao
        (
        @SerializedName("loc") var coordinate: Location,
        var city: String?,
        var name: String?
    )

【讨论】:

【参考方案2】:

你应该为“loc”创建一个数据类

data class Salao(
        @SerializedName("loc")
        val location : Location,
        val city : String,
        val name : String,
        @SerializedName("_id")
        val id : String
    )

data class Location (
        val type : String,
        val coordinates : Array<Float>
    )

【讨论】:

成功了!谢谢我的朋友!

以上是关于如何使用 Retrofit 2.0 (Kotlin) 正确解析嵌套的 JSON 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Retrofit Android Kotlin 发布 [重复]

如何使用拦截器在 Retrofit 2.0 中添加标头?

使用 Retrofit2(kotlin) 的 CURL 请求

Retrofit 2.0如何获得反序列化错误response.body

Retrofit 2.0如何获得反序列化错误response.body

在 Kotlin 中使用 Moshi 和 Retrofit 解析具有增量对象名称的 JSON