在kotlin中检查JSON是JSONObject还是JSONArray
我正在从服务器获取JSON字符串。我有这样的数据(JSON数组) 但有时,如果我输入了错误的信息,这些数据可以是(JSON对象)或null在kotlin中检查JSON是JSONObject还是JSONArray,kotlin,Kotlin,我正在从服务器获取JSON字符串。我有这样的数据(JSON数组) 但有时,如果我输入了错误的信息,这些数据可以是(JSON对象)或null data : null 我想在对象和数组中执行不同的操作。我得到了以下例外 Caused by: org.json.JSONException: Value null of type org.json.JSONObject$1 cannot be converted to JSONArray 我做了这个密码但他不工作 val jsonArray = J
data : null
我想在对象和数组中执行不同的操作。我得到了以下例外
Caused by: org.json.JSONException: Value null of type org.json.JSONObject$1 cannot be converted to JSONArray
我做了这个密码但他不工作
val jsonArray = JSONArray(response.get("data").toString())
if(jsonArray.isNull(0)){
jsonArray.getJSONObject(0).getString("data");
}
您可以使用is操作符检查对象是JsonObject还是JsonArray,如下所示
val jsonObj = JSONObject(jsonString)
if(jsonObj is JsonArray){
//handle operation with JsonArray
}else if (jsonObj is JsonObject){
// treat this as JsonObject
}
您还可以在kotlin中使用when表达式来检查以下条件:
when(jsonObj){
is JsonObject -> { // treat this as JsonObject}
is JsonArray -> { //treat this as JsonArray}
else -> { //I have to find some other way to handle this}
}
更新-对于Json,应该像这样进行解析
为以下json创建pojo,比如Xyz.kt
{
"identification": {
"id": null,
"number": {
"default": "IA224",
"alternative": null
},
"callsign": null,
"codeshare": null
}
}
val resultJson = JSONObject(jsonString)
val responseJson = resultJson.getJsonObject("response")
val dataList = responseJson.getJsonArray("data")
如果每次都得到相同的Json响应结构,那么不必检查dataList是JsonArray还是JsonObject。
您可以简单地遍历dataList以获取Xyz对象的列表,或者使用get()方法获取第一个JsonElement(Xyz的对象)。使用下面的代码来标识JSON字符串是JSONObject还是JSONArray
var json = JSONTokener(yourJSONString).nextValue()
when (json) {
is JSONObject -> { //it is a JsonObject
}
is JSONArray -> { //it is a JsonArray
}
else -> { //handle the odd scenario
}
}
感谢您的回答,您的代码运行良好,但jsonarray存在问题。当我运行应用程序时,我得到了所有json数据的响应!检查更新的答案。我希望这能解决你的问题,就像我得到的Json响应结构一样。如果我删除表达式when或if并尝试在编辑文本中输入值并执行,我得到异常,因为我输入了错误的信息,异常是由以下原因引起的:
:org.json.JSONException:value null类型org.json.JSONObject$1不能转换为JSONArray
我不知道我必须做什么您也可以使用Gson或Jackson将直接返回具有解析响应的对象的转换器
var json = JSONTokener(yourJSONString).nextValue()
when (json) {
is JSONObject -> { //it is a JsonObject
}
is JSONArray -> { //it is a JsonArray
}
else -> { //handle the odd scenario
}
}