7

可能重复:
确定 JSON 是 JSONObject 还是 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 ?

4

2 回答 2

16

使用JSONTokener. 这JSONTokener.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
    //...
}
于 2013-02-04T11:44:24.780 回答
0

您正在尝试从服务器获得的转换字符串响应JSONObject导致异常。正如您所说,您JSONArray将从服务器获得,您尝试转换为JSONArray. 请参考此链接,它将帮助您何时将字符串响应转换为JSONObjectJSONArray。如果您的响应以 [(开方括号)开头,则将其转换为 JsonArray,如下所示

JSONArray ja = new JSONArray(jsonResponse);

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

JSONObject jo = new JSONObject(jsonResponse);
于 2013-02-04T11:30:26.127 回答