2016-07-04 119 views
0

我想實現當我填充JSON數組列表視圖我的舊代碼,但我目前的JSON沒有指定數組,整體JSON是一個數組...JSON對象GSON到列表

有人可以告訴我如何將我的代碼轉換爲像這樣使用JSON?

https://api-v2.hearthis.at/categories/drumandbass/?page=15&count=2

代碼使用GSON,我的老:

protected List<Model> doInBackground(String... params) { 
    HttpURLConnection connection = null; 
    BufferedReader reader = null; 
    try { 
    URL url = new URL(params[0]); 
    connection = (HttpURLConnection) url.openConnection(); 
    connection.connect(); 
    InputStream stream = connection.getInputStream(); 
    reader = new BufferedReader(new InputStreamReader(stream)); 
    StringBuffer buffer = new StringBuffer(); 
    String line =""; 
    while ((line = reader.readLine()) != null){ 
     buffer.append(line); 
    } 

    String finalJson = buffer.toString(); 

    JSONObject parentObject = new JSONObject(finalJson); 
    JSONArray parentArray = new JSONArray("arrayname"); 

    List<Model> dataModelList = new ArrayList<>(); 

    Gson gson = new Gson(); 
    for(int i=0; i<parentArray.length(); i++) { 
     JSONObject finalObject = parentArray.getJSONObject(i); 

     Model modelList = gson.fromJson(finalObject.toString(), Model.class); 
     dataModelList.add(modelList); 
    } 
    return dataModelList; 
    } catch (MalformedURLException e) { 
    e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } finally { 
    if(connection != null) { 
     connection.disconnect(); 
    } 
    try { 
     if(reader != null) { 
     reader.close(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 
return null; 
} 

回答

1

而不是這樣做:

JSONObject parentObject = new JSONObject(finalJson); 
JSONArray parentArray = new JSONArray("arrayname"); 

只是這樣做:

JSONArray parentArray = new JSONArray(finalJson); 
+0

我你,但THX之前想通了,答案接受,因爲它是100%正確的 – ramzixp

1

如果我理解正確的問題,我想你有麻煩解析誰的名字不與鍵指定的數組。所以,一個簡單但不這樣做的一個很好的辦法是,當你創建finalJson這樣的:

String finalJson = buffer.toString(); 

只需添加一行檢查它是否包含數組打開支架,像這樣:

if(finalJson.contains("[")){ 
finalJson = finalJson.replace("[","{ 
    "arrayname": ["); 
} 

此外,請適當關閉陣列。

if(finalJson.contains("]")){ 
finalJson = finalJson.replace("]","] 
}"); 
} 

這樣,你將有一個數組解析的名稱,我想這就是你要找的。但是如果你的Json中有一個以上的數組,那麼這種方法可能會失敗,在這種情況下,你必須使用startsWith & endsWith字符串方法給你的數組命名。但是,就目前而言,從你的Json看起來,這是行得通的。