如何从 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)
我试图从 ResponseEntity
<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)