2

responseBodyコードのこのセクションがあります (実際には Web サーバーからのものであることに注意してください)。

public JSONObject getObj(){
    String responseBody = '[{"zip":"56601","city":"Bemidji","state":"MN","county":"Beltrami","dist":"0.14802"},{"zip":"56619","city":"Bemidji","state":"MN","county":"Beltrami","dist":"3.98172"}]';

    JSONObject response = null;

    try{
        response = new JSONObject(responseBody);
    }catch(JSONException ex){
        Logger.getLogger(Http.class.getName()).log(Level.SEVERE, null, ex);
    }
    return response;
}

JSONObject が例外をスローする理由がわかりません。何がそうさせているのですか?

4

3 に答える 3

3

これは、JSONObject ではなく JSONObject を含む JSONArray です。

このリンクを参照してください: http://www.w3schools.com/json/json_syntax.asp

于 2013-01-23T21:01:32.143 に答える
0

[] で囲まれたJSONObjectものから {} で囲まれた -を作成しようとしているため、例外が発生しています。JSONArray応答本文を見ると、角括弧 [] で囲まれており、JSONArray であることがわかります。

個々のオブジェクトを取得するには、(1) JSONArray を作成する必要があります。(2) 必要な値に対して別の JSONObject を作成します。(3) そのオブジェクトを返します。たとえば、responseBody の最初の値を返すには:

try{
JSONArray responseArray = new JSONArray(responseBody);
return responseArray.getJSONObject(0);
} catch (JSONException e) {
    Log.e("JSON", e.toString());
}

上記の例で返された特定の JSONObject から情報 (郵便番号など) を取得するには、次のようにします。

JSONObject a = getObj(); 
String zip = a.getString("zip");

配列の反復処理も同様に簡単です。JSONObjects は JSONArray からインデックス番号で抽出されるため、afor loopを使用して各オブジェクトを抽出するだけです。その後、必要に応じて内部文字列を処理できます。

于 2013-01-23T21:09:56.813 に答える
0

これはうまくいくはずです:

public static JSONArray getObj(){
    String responseBody = "[{\"zip\":\"56601\",\"city\":\"Bemidji\",\"state\":\"MN\",\"county\":\"Beltrami\",\"dist\":\"0.14802\"},{\"zip\":\"56619\",\"city\":\"Bemidji\",\"state\":\"MN\",\"county\":\"Beltrami\",\"dist\":\"3.98172\"}]";

    JSONArray response = null;

    try{
        return new JSONArray(responseBody);
    }catch(JSONException ex){
        ex.printStackTrace();
    }
    return response;
}
于 2013-01-23T21:00:20.980 に答える