程序中的一個服務器,默認返回一些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 可以運行時確獲得 JSONException。它是一個JSONArray,JSONArray
不能轉換成 JSONOBject。如何確認 jsonResponse 傳過來的值是 JSONArray 還是 JSONObject ?
我明白你的意思了,首先看下這兩個類型轉換為字符串後的區別
......
JSONObject jo = createJSONObject();
JSONArray ja = new JSONArray();
ja.put(jo);
System.out.println("jo is "+jo.toString());//{"sex":"男","username":"ZhangSam","score":123}
System.out.println("ja is "+ja.toString());//[{"sex":"男","username":"ZhangSam","score":123}]
}
public static JSONObject createJSONObject(){
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("username", "ZhangSam");
jsonObject.put("sex", "男");
jsonObject.put("score", new Integer(123));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonObject;
}
所以你要想寫都能識別的,只需正則檢查是否[
開頭即可
然後才能進行你的這一步:如是非[開頭,JSONObject json = new JSONObject(jsonResponse);
另外還一種方法就是在finally中處理
最後一點與題無關的是,JSONObject與JSONArray可以互轉,
(toJSONObject/toJSONArray)