如何从 KOTLIN 中 API 的实体响应输出类型内部的键中提取内部 JSONObject 的值?

How to extract values from inner JSONObject from a key inside of entity response output-type of an API in KOTLIN?

我试图从 ResponseEntity 变量“result”中获取 JSONObjects 数组。

 <200 OK,{"response":"success","count":0,"maintenanceDetails":[{"date":"2020\/08\/21","activity":"TestActivity","operatorName":"Operator","operator":"Mock for Party, hashCode: 552416003","status":"Open"}],"buildingId":Mock for UUID, hashCode: 2141932519},{}>

Output value of result is given above.

val result = dashBoardService!!.getMaintenanceStateByBuildingId(id)

println("Result "+result.body["maintenanceDetails"])

val a =result.body["maintenanceDetails"] as Array<JSONObject>
println("A  "+ a.first().get("activity"))

我使用“as Array < JSONObject >”进行转换,因为 result.body["maintenanceDetails"] 通常以“Any”类型出现,我无法提取更多。但这给了我以下错误。

java.lang.ClassCastException: java.util.ArrayList cannot be cast to [Lorg.json.simple.JSONObject;

我需要的是从数组中获取第一个 JSONObject 对应于 result.body["maintenanceDetails"] 以便我可以在断言检查中使用它。请帮忙。

使用:

val array = JSONArray(result.body["maintenanceDetails"])
val first = array.getJSONObject(0)

您可以使用 JSONArray() 访问 json 对象(根)内的数组,然后迭代数组以获取数组中存在的所有 json 对象。这是一个示例,

import org.json.simple.JSONArray
import org.json.simple.JSONObject

val jsonObject = JSONObject()
val childObject = JSONObject()
childObject["date"]="10-10-2010"
childObject["operator"]="mock party"
val jsonArray = JSONArray()
jsonArray.add(0,childObject)
jsonObject["response"]="success"
jsonObject["count"]=0
jsonObject["maintenanceDetails"]=jsonArray
val json = jsonObject["maintenanceDetails"] as JSONArray
println(json[0])
val outputObject = json[0] as JSONObject
println(outputObject["operator"]) 

输出:

{"date":"10-10-2010","operator":"mock party"}
mock party

转换正在转换为 ArrayList,因为它被 Intelij 视为 util.ArrayList,所以在此之后我可以从内部获取数据。

val tempArr= result.body["maintenanceDetails"] as ArrayList<JSONObject>


assertEquals(tempArr[0]["activity"],maintenanceState.activity)
assertEquals(tempArr[0]["status"],maintenanceState.status)