Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在kotlin中检查JSON是JSONObject还是JSONArray_Kotlin - Fatal编程技术网

在kotlin中检查JSON是JSONObject还是JSONArray

在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

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