2014-05-05 56 views
-3

我有這樣的 「http://www.somesite.com/json」 遠程JSON代碼而不JSONArray:的JSONObject無標題JSONArray

[ 
    { 
     "artist":"Some Artist 1", 
     "track":"Some Track 1", 
    } 

    { 
     "artist":"Some Artist 2", 
     "track":"Some Track 2", 
    } 

    { 
     "artist":"Some Artist 3", 
     "track":"Some Track 3", 
    } 

    { 
     "artist":"Some Artist 4", 
     "track":"Some Track 4", 
    } 

] 

我不能改變這個JSON添加JSONArray。

,我已經爲獲得價值 「跟蹤」 Java代碼:

SomeActivityCut​​:

try { 

    JSONObject jsonarray = JSONfunctions.getJSONfromURL("http://www.somesite.com/json"); 

       for(int i=0; i < 4; i++){ 

        jsonobject = jsonarray.getJSONObject("track"); 

        curtrack.setText(jsonobject.getString("track")); 
       } 

      } catch (JSONException e) { 
       Log.e("Error", e.getMessage()); 
       e.printStackTrace(); 
      } 

這是我用於獲取JSON數據類:

JSONfunctions:

public class JSONfunctions { 

    public static JSONObject getJSONfromURL(String url) { 
     InputStream is = null; 
     String result = ""; 
     JSONObject jArray = null; 

     // Download JSON data from URL 
     try { 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(url); 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 

     } catch (Exception e) { 
      Log.e("log_tag", "Error in http connection " + e.toString()); 
     } 

     // Convert response to string 
     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      result = sb.toString(); 
     } catch (Exception e) { 
      Log.e("log_tag", "Error converting result " + e.toString()); 
     } 

     try { 

      jArray = new JSONObject(result); 
     } catch (JSONException e) { 
      Log.e("log_tag", "Error parsing data " + e.toString()); 
     } 

     return jArray; 
    } 
} 

此代碼稱爲致命EXEPTION:

E/log_tag:錯誤解析數據org.json.JSONException:輸入結束在

回答

2

首先此JSON的 字符0是無效的。您的JSON的有效版本應該是

[ 
    { 
     "artist": "Some Artist 1", 
     "track": "Some Track 1" 
    }, 
    { 
     "artist": "Some Artist 2", 
     "track": "Some Track 2" 
    }, 
    { 
     "artist": "Some Artist 3", 
     "track": "Some Track 3" 
    }, 
    { 
     "artist": "Some Artist 4", 
     "track": "Some Track 4" 
    } 
] 

然後,你不能建立一個JSONObject如果你得到一個JSONArray。我也懷疑你想要一個HttpGet,而不是一個HttpPost,因爲我沒有看到你使用body(不是強制性的)。 所以,這是我怎麼想你想你的JSONfunctions:

public class JSONfunctions { 

    public static JSONArray getJSONfromURL(String url) { 
     InputStream is = null; 
     String result = ""; 
     JSONArray jArray = null; 

     // Download JSON data from URL 
     try { 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpGet get = new HttpGet(url); 
      HttpResponse response = httpclient.execute(get); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 

     } catch (Exception e) { 
      Log.e("log_tag", "Error in http connection " + e.toString()); 
     } 

     // Convert response to string 
     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      result = sb.toString(); 
     } catch (Exception e) { 
      Log.e("log_tag", "Error converting result " + e.toString()); 
     } 

     try { 

      jArray = new JSONArray(result); 
     } catch (JSONException e) { 
      Log.e("log_tag", "Error parsing data " + e.toString()); 
     } 

     return jArray; 
    } 
} 

在此之後,你只需要遍歷您的JSONArray:

JSONArray tracks = JSONfunctions.getJSONfromURL("http://www.somesite.com/json"); 
if(tracks != null) { 

    for(int i = 0; i < tracks.length(); i++) { 

     try { 

      Log.d("[email protected]" + i, tracks.getJSONObject(i).getString("track")); 
     } 
     catch (JSONException e) { 

      e.printStackTrace(); 
     } 
    } 
}