检查JSON是kotlin中的JSONObject还是JSONArray

时间:2018-12-06 19:20:30

标签: kotlin

我正在从服务器获取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");
            }

2 个答案:

答案 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
    }
}