使用 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)
}
})
能否请您帮助我了解如何使用 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)
}
})