Moshi:将多个JSON属性集成到类的一个字段中

时间:2019-04-11 02:10:04

标签: android json parsing kotlin moshi

假设我们具有以下JSON结构:

"data": [
        {
            "order_id": 460,
            "order_no": "365"
        },
        ....
]

"data": {
        "id": 460,
        "order_no": "365"
}

一个是订单清单,另一个是订单明细。为了解析这样的结构,我想重用相同的类。

data class Order (
    @Json(name = "id") val id: Int?,
    @Json(name = "order_id") val orderId: Int?,
    @Json(name = "order_no") val orderNumber: Int
)

data class OrderListingResponse (
    @Json(name = "data") val data: List<Order>
)

data class OrderDetailsResponse (
    @Json(name = "data") val data: Order
)

在具有相同数据的不同属性命名变得太多之前,此实现看起来还可以。我想将多个属性合并为一个,以便使可重用的类更短,更优雅,以用于订单清单和订单详细信息:

data class Order (
        @Json(names = ["id", "order_id"]) val id: Int,
        @Json(name = "order_no") val orderNumber: Int
    )

如何使用Moshi来实现这样的结果而不在类中创建其他字段,而只是在JSON中以不同的属性命名重用同一字段?

赞赏您是否可以提供用于自定义注释实现的示例代码。使用接口不是我想要的。

1 个答案:

答案 0 :(得分:0)

您需要创建一个自定义类型适配器,以将多个JSON字段整合到一个属性中。

步骤:

  1. 创建一个自定义类型适配器,它将您的json字段转换为属性。 (使用您的order_id / id逻辑)。

  2. Moshi.Builder

  3. 注册自定义类型适配器