使用 GSON 从嵌套 json 获取数据

Get data from nested json using GSON

能否请您帮助我了解如何使用 GSON 解析嵌套 json 文件中的数据。我看过其他类似的问题,但看不出我在哪里犯了错误。我正在尝试从我的 json 文件中获取 ID、用户、技术人员和帐户。

我的 JSON 文件如下所示:

{
  "operation": {
    "result": {
      "message": "successful",
      "status": "done"
    },
    "details": [
      {
        "id": "106818",
        "user": "Leona",
        "technician": "45441",
        "account": "Inc",
        "status": "Open"
      }
    ]
  }
}

代码:

        val url = "https://myURL"
        val request = Request.Builder().url(url).build()

        val client = OkHttpClient()
        client.newCall(request).enqueue(object :Callback{
            override fun onFailure(call: Call, e: IOException) {
                println("Failed - onFailure")
            }

            override fun onResponse(call: Call, response: Response) {
                val body = response?.body()?.string()
                println(body)

                val gson = GsonBuilder().create()
                gson.fromJson(body, HomeFeed::class.java)

               }

        })

    }
}


class HomeFeed(val details: List<Details>)
class Details(val id: String, val user:String, val technician:String, val account:String)   

错误:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.kotlinjsontube, PID: 10905
    java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.Collection.size()' on a null object reference
        at com.example.kotlinjsontube.MainAdapter.getItemCount(MainAdapter.kt:13)

谢谢。

您的响应建模为 POJO class:

Model.kt

data class Model(
  val operation: Operation,
  val details: List<Detail>
)

data class Operation(
  val result: Result
)

data class Result(
  val message: String,
  val status: String
)



data class Detail(
  val id: String,
  val user: String,
  val technician: String,
  val account: String,
  val status: String
)

Class 您提出请求的地方:

val url = "https://myURL"
val request = Request.Builder().url(url).build()

val client = OkHttpClient()
client.newCall(request).enqueue(object :Callback{
    override fun onFailure(call: Call, e: IOException) {
        println("Failed - onFailure")
    }

    override fun onResponse(call: Call, response: Response) {
        val body = response?.body()?.string()
        println(body)

        val gson = GsonBuilder().create()
        gson.fromJson(body, Model::class.java)

       }

})