我正在尝试将我的JSONArray
映射到Array<String?>
。
我正在这样做:
fun getTextResponse(responseJson: JSONObject): Array<String?>{
val resultData = responseJson.getJSONArray("data")
.getJSONObject(0)
.getJSONArray("result")
return resultData.map{ it.getString("label") }.toTypedArray()
}
但是it
的类型不是JSONObject
,有什么办法可以强制将其键入JSONObject
吗?
答案 0 :(得分:2)
问题是resultData
的类型为JSONArray
,这是JSON实用程序类,不会覆盖Kotlin / Java Array
接口,因此没有{ {1}}功能。
您必须按索引检索每个字符串并生成新的数组,如下所示:
map
答案 1 :(得分:1)
jackqack在他的answer中提出的建议是您应该做的,我只是想补充一点,因为您要返回一个Array<String?>
,所以还应该将异常映射为null。这将使您的代码更健壮。泛型类型参数也可以被推断,因此可以省略。
fun getTextResponse(responseJson: JSONObject): Array<String?> {
val resultData = responseJson.getJSONArray("data")
.getJSONObject(0)
.getJSONArray("result")
return Array(resultData.length()) { i ->
try {
resultData.getString(i)
} catch (e: JSONException){
null
}
}
}
答案 2 :(得分:0)
问题是您的resutData
没有map
函数!参见https://developer.android.com/reference/org/json/JSONArray。
相反,您可以做的是遍历JSONArray并将每个条目添加到新Array中,如下所示:
fun getTextResponse(responseJson: JSONObject): Array<String?>{
val resultData = responseJson.getJSONArray("data")
.getJSONObject(0)
.getJSONArray("result")
val arrayList = ArrayList<String>()
for (i in 0..resultData.length()) {
arrayList.add(resultData[i].toString())
}
return arrayList.toArray(arrayOfNulls<String>(arrayList.size))
}