微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用moshi将房间关系变成嵌套的json?

如何解决如何使用moshi将房间关系变成嵌套的json?

假设我有一个狗和主人的 POJO:

    @Entity
    data class Dog(
        @PrimaryKey val dogId: Long,val dogOwnerId: Long,val name: String,val cuteness: Int,val barkVolume: Int,val breed: String
    )

    @Entity
    data class Owner(@PrimaryKey val ownerId: Long,val name: String)

然后我定义一个一对多的关系来得到一个所有者和他对应的狗

    data class OwnerWithDogs(
         @Embedded val owner: Owner,@Relation(
              parentColumn = "ownerId",entityColumn = "dogOwnerId"
         )
         val dogs: List<Dog>
    )

然后 Dao 提供新定义的关系

    @Query("SELECT * FROM Owner")
    fun getDogsAndOwners(): List<OwnerWithDogs>

现在为了将 OwnerWithDogs 转换为 json,我在关系模型和 POJO 中声明了 moshi 适配器:

    @JsonClass(generateAdapter = true)  //<---
    data class OwnerWithDogs(
         @Embedded val owner: Owner,entityColumn = "dogOwnerId"
         )
         val dogs: List<Dog>
    )

    @Entity
    @JsonClass(generateAdapter = true)  //<---
    data class Dog(
        @PrimaryKey val dogId: Long,val breed: String
    )

    @Entity
    @JsonClass(generateAdapter = true)  //<---
    data class Owner(@PrimaryKey val ownerId: Long,val name: String)

当 DAO 返回一个列表时,我必须声明一个自定义适配器来创建 json

    val type: ParameterizedType = Types.newParameterizedType(List::class.java,OwnerWithDogs::class.java)
    val adapter: JsonAdapter<List<OwnerWithDogs>> = moshi.adapter(type)

现在我获取关系并将其转换为 json:

    val ownerWithDogs: List<OwnerWithDogs> = dao.getDogsAndOwners()
    val json = adapter.toJson(ownerWithDogs)

输出如下:


   [
        "owner": {...},"dogs": [....]
   ]

我怎样才能输出这样的房间关系?:


   [
        "owner": {
            "dogs": [...],...
        }
   ]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。