我有一个服务器默认返回一些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?
答案 0 :(得分: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
//...
}
答案 1 :(得分:0)
您正在尝试将从Server获取的转换字符串响应转换为导致异常的JSONObject
。正如您所说,您将从服务器获取JSONArray
,您尝试转换为JSONArray
。请参阅此link,这有助于您何时将字符串响应转换为JSONObject
和JSONArray
。如果您的响应以[(Open Square Bracket)开头,则将其转换为JsonArray,如下所示
JSONArray ja = new JSONArray(jsonResponse);
如果您的回复以{(打开花括号)开头,则将其转换为
JSONObject jo = new JSONObject(jsonResponse);