使用Kotlin的Json数据

时间:2018-10-05 06:34:01

标签: json kotlin moshi

我目前正在开发一个应用程序,我想对一个类进行JSON提取,但是仅匹配字段会有些困难。我正在使用Moshi进行JSON管理。

下面是我拥有的JSON:

{
  "common" :{
    "source_url": "xxxx",
    "target_url": "yyy
  },
  "specific":{
    "A":{
      "setting": "ccc",
    },
    "B":{
      "setting": "ddd",
    }
  }
}

对我来说,目标是基于如下所示的数据类获取对象:

data class config(
    val sourceUrl: String,
    val targetUrl: String,
    val setting: String
)

我开始的工作是首先创建不同的数据类,以使我能够在获得上述类对象之前操纵数据。

-GeneralConfig.kt

data class GeneralConfig(
    val common: CommonConfig,
    val specific: Specific
)

-CommonConfig.kt

data class CommonConfig(
    @Json(val name = "source_url") sourceUrl: String,
    @Json(val name = "target_url") val targetUrl: String
)

-SpecificConfig.kt

data class SpecificConfig(
    setting: String,
)

我有2个主要问题:

  • 如何访问“特定”“ A / B”数据并获得对象类SpecificConfig。我可以在我的generalConfig数据类中直接从specific提取一个字段并通过传递参数来选择AB

  • 是否可以避免创建多个数据类来获取我的最终类对象config

目的是使json包含公共数据和特定数据。我需要构建一个最终数据类,该类将通用数据和特定数据之一合并。

有什么主意吗?谢谢

2 个答案:

答案 0 :(得分:0)

尝试一下 1.修改

data class SpecificConfig(
    setting: String,
)

收件人

data class SpecificConfig(
@Json(val name = "A") val a : JsonObject,
    @Json(val name = "B") val b: JsonObject
)

第二:创建另外两个类,即

data class AConfig(
    setting: String,
)

data class BConfig(
    setting: String,
)

第三:修改

data class config(
    val sourceUrl: String,
    val targetUrl: String,
    val setting: String
)

收件人

data class config(
    val sourceUrl: String,
    val targetUrl: String,
    val setting: String,
    val a: JsonObject,
    val b: JsonObject
)

答案 1 :(得分:0)

我希望为每个请求创建类,而不是手动对其进行解析

data class GeneralConfig(
        @SerializedName("common") val common: CommonConfig,
        @SerializedName("specific") val specific: Specific
                        )

data class CommonConfig(
        @SerializedName("source_url") val sourceUrl: String,
        @SerializedName("target_url") val targetUrl: String
                 )

data class Specific(
        @SerializedName("A") val a: SpecificSettings,
        @SerializedName("B") val b: SpecificSettings
                 )

data class SpecificSettings(
        @SerializedName("setting") val setting: String
                 )