2016-12-30 103 views
-1

如何可以解析此JSON API與WebRequest的,正是元素「玩家」:當循環運行一個playernameAndroid的JSON數組解析

{ 
    "data": [ 
     { 
      "Id": *, 
      "ModId": *, 
      "appId": ***********, 
      "online": *, 
      "Servername": "**** **** *****", 
      "IpAddress": "**.**.**.**", 
      "Port": ****, 
      "ServerPassword": ********, 
      "StartParameters": "*******", 
      "Slots": **, 
      "Playercount": **, 
      "Civilians": **, 
      "Medics": *, 
      "Cops": *, 
      "Adac": *, 
      "Players": [ 
       "***********", 
       "***********", 
       "******", 
       "******" 
      ] 
     } 
    ] 
} 

我希望它能夠解析我得到的每一次將其添加到列表視圖。 但我不知道如何解析像這樣的「Players」元素。

謝謝你的幫助!

+0

http://stackoverflow.com/questions/5566669/how-to-parse-a-json-object-in-android – NehaK

回答

0

下面的代碼填充與您的JSON字符串的球員名單。

List<String> players = new ArrayList<>(); 

try { 
    JSONObject jsonObj = new JSONObject(jsonString); 
    JSONArray data = jsonObj.getJSONArray("data"); 
    JSONObject dataObj = data.getJSONObject(0); 
    JSONArray playersJson = dataObj.getJSONArray("Players"); 

    for (int i = 0; i < playersJson.length(); i++) { 
     players.add(playersJson.get(i).toString()); 
    } 
} catch (JSONException e) { 
    Log.e(TAG, e.getMessage()); 
} 

然後,您可以沿着使用此列表與ArrayAdapter來填充ListView

ArrayAdapter<String> adapter; 
    ListView listView = (ListView) findViewById(R.id.listView); 
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, players); 
    listView.setAdapter(adapter); 
+0

而不是使用adapter.notifyDataSetChanged();你有沒有嘗試按照我的方式設置適配器?你有什麼錯誤嗎?如果是這樣,請發佈堆棧跟蹤。 –

+0

我用你的ListView適配器試了一下。沒有改變,但我發現了這個錯誤,但我不知道如何解決它。凌空的迴應完全是空的。 – emt1803

+0

你確定玩家正在填充?你能記錄列表的長度/內容來檢查嗎?此外,如果拋出異常,你應該在catch分支中放入一條日誌語句。 –

0

可以節省多少元素已經從JSON刪除索引。像

int index = 0;

,並創建訪問JSON並通過索引來像

public String getPlayerFromJsonAtIndex(int i) {...}的方法。

現在訪問JSON字符串並使用JSONObject解析它(提示在開始時立即存儲解析的Players數組)。讓你從這個玩家JSONArray獲得在提供索引串解析玩家陣列狀

JSONArray players = (new JSONObject(jsonString)) 
    .getJSONArray("data") 
    .get(0) 
    .getJSONArray("Players"); 

現在。像

{ 
    return (String)players.get(i); 
} 

希望這有助於謝謝你。

+0

謝謝你,但是編譯器說,在該行:.getJSONArray(「玩家「); :「無法解析方法.....」 – emt1803

0

使用下面的代碼來解析響應。

JSONObject objMain = new JSONObject(yourData); 
     try { 
      JSONArray respArray = objMain.getJSONArray("data"); 
      for(int i=0;i<respArray.length();i++) 
      { 
       JSONObject dataObj = respArray.getJSONObject(i); 
       String id = dataObj.getString("id"); 
       - 
         - 
       JSONArray arrayPlayer = dataObj.getJSONArray("players"); 
       for(int j=0;j<arrayPlayer.length();j++){ 
        JSONObject playerObj = arrayPlayer.getJSONObject(j); 
        --- 
       } 
      } 
     }catch (Exception e){ 
      e.printStackTrace(); 
     } 

,並採取剩餘的數據用合適的參數.. :)