【问题标题】:Kotlin Gson parsing Json Object and ArrayKotlin Gson 解析 Json 对象和数组
【发布时间】:2021-09-30 17:12:46
【问题描述】:

我对 Kotlin 和 Json 还很陌生,在我的工作中,我使用 GSON 来解析 Json。 我需要使用 GSON 将以下 Json 文件解析为 Class。

 {
      "apiKey": "blablabla",
      "baseUrl": "blablabla",
      "requestData": [
        {
          "lng": "6.971",
          "lat": "50.942",
          "rad": "1.5",
          "type": [
                  "diesel",
                  "super"
          ]
        },
        {
          "lng": "6.442",
          "lat": "51.180",
          "rad": "1.5",
          "type": [
            "diesel",
            "super"
          ]
        },{
          "lng": "7.136",
          "lat": "50.991",
          "rad": "1.5",
          "type": [
            "diesel",
            "super"
          ]
        }
      ]
    }

现在我尝试制作这样的数据类:

data class ApiParameterData(
    var apiKey: String? = null,
    var baseUrl: String? = null,
    var requestData: String? = null) {

}

我还创建了另一个类来存储 Json 信息,如下所示:

class Tankstelle: JsonDeserializer<ApiParameterData> {
    override fun deserialize(json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext?
    ): ApiParameterData {
        json as JsonObject

        val apiKey = json.get("apiKey").asString
        val baseUrl = json.get("baseUrl").asString
        val requestDataJson = json.get("requestData")
        val requestData = if (requestDataJson.isJsonObject) requestDataJson.asJsonObject.toString() else requestDataJson.toString()

        return ApiParameterData(apiKey, baseUrl, requestData)
    }
}

我试着这样称呼它:

val gsonConfig = GsonBuilder().registerTypeAdapter(ApiParameterData::class.java, Tankstelle()).create()
val tanke = gsonConfig.fromJson(readJson, ApiParameterData::class.java)
println(tanke.requestData?.get(0))

但我得到的输出当然是 "[" 。我想是因为我得到了一个 String 什么的,这是它的第一个符号?

我需要遍历 requestData 列表并将其存储为类的实例,并且需要访问每个不同的值。 问题是我想给 Json 文件提供不同的位置和范围,它应该寻找加油站。通过阅读 Json,它应该获取所有部分并为我在 requestData 列表中写入的每个位置创建一个链接。所以在这种情况下,我最后需要 3 个不同的链接。但这是我可以自己做的另一部分。我只是不知道如何解析它,所以我可以访问和存储这个 Json 中的每个值。

已经谢谢你了,周末愉快!

如果您需要更多信息,请告诉我

【问题讨论】:

    标签: arrays json list kotlin gson


    【解决方案1】:

    首先你需要定义两种映射到你的JSON结构的类型

    class ApiParameterData(
            val apiKey: String,
            val baseUrl: String,
            val requestData: List<RequestObject>
    )
    
    class RequestObject(
            val lng: String,
            val lat: String,
            val rad: String,
            val type: List<String>
    )
    

    现在只需将其解析为

    val apiData = Gson().fromJson(readJson, ApiParameterData::class.java)     // No need to add TypeAdapter
    
    // To get requestData
    val requestData = apiData.requestData
    requestData.forEach { 
      print("${it.lng}, ${it.lat}, ${it.rad}, ${it.type})
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      相关资源
      最近更新 更多