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 の場合に JSONException が発生します (JSONArray は JSONOBject に変換できません) 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。文字列応答をとに変換するときに役立つこのリンクを参照してください。応答が[(角括弧を開く)で始まる場合は、以下のようにJsonArrayに変換しますJSONObjectJSONArray

JSONArray ja = new JSONArray(jsonResponse);

応答が{(オープンフラワーブラケット)で始まる場合は、次のように変換します

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