如何检查服务器的响应是JSONAobject还是JSONArray?

时间:2013-02-04 11:25:38

标签: android json

  

可能重复:
  Determine whether JSON is a JSONObject or JSONArray

我有一个服务器默认返回一些JSONArray,但是当发生一些错误时它会返回带有错误代码的JSONObject。我正在尝试解析json并检查错误,我有一段代码检查错误:

public static boolean checkForError(String jsonResponse) {

    boolean status = false;
    try {

        JSONObject json = new JSONObject(jsonResponse);

        if (json instanceof JSONObject) {

            if(json.has("code")){
                int code = json.optInt("code");
                if(code==99){
                    status = true;
                }
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return status ;
}

但是当jsonResponse没问题并且它是JSONArray(JSONArray无法转换为JSONOBject)时我得到JSONException如何检查jsonResponse是否会为我提供JSONArray或JSONObject?

2 个答案:

答案 0 :(得分:16)

使用JSONTokenerJSONTokener.nextValue()将为您提供Object,可根据实例动态转换为相应的类型。

Object json = new JSONTokener(jsonResponse).nextValue();
if(json instanceof JSONObject){
    JSONObject jsonObject = (JSONObject)json;
    //further actions on jsonObjects
    //...
}else if (json instanceof JSONArray){
    JSONArray jsonArray = (JSONArray)json;
    //further actions on jsonArray
    //...
}

答案 1 :(得分:0)

您正在尝试将从Server获取的转换字符串响应转换为导致异常的JSONObject。正如您所说,您将从服务器获取JSONArray,您尝试转换为JSONArray。请参阅此link,这有助于您何时将字符串响应转换为JSONObjectJSONArray。如果您的响应以[(Open Square Bracket)开头,则将其转换为JsonArray,如下所示

JSONArray ja = new JSONArray(jsonResponse);

如果您的回复以{(打开花括号)开头,则将其转换为

JSONObject jo = new JSONObject(jsonResponse);