我正在从服务器获取JSON字符串。我有看起来像这样的数据(JSON数组)
{
"result": {
"response": {
"data": [
{
"identification": {
"id": null,
"number": {
"default": "IA224",
"alternative": null
},
"callsign": null,
"codeshare": null
}
}
]
}
}
}
但是有时候,如果输入了错误的信息,则该数据可以是(JSON对象)或为null
data : null
我想对对象进行不同的操作,对数组进行不同的操作。我正在跟踪异常
Caused by: org.json.JSONException: Value null of type org.json.JSONObject$1 cannot be converted to JSONArray
l编写了此代码,但他不起作用
val jsonArray = JSONArray(response.get("data").toString())
if(jsonArray.isNull(0)){
jsonArray.getJSONObject(0).getString("data");
}
答案 0 :(得分:0)
您可以使用 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说Xyz.kt创建pojo
{
"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的对象)。
答案 1 :(得分:0)
使用以下代码确定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
}
}