2011-02-01 58 views
0

Hy!JSON數組問題

我有一個帶有電視頻道的JSON陣列,陣列的長度是三個,但是在傳輸到一個樹形圖之後,該值只有一個。

請幫助

代碼:

try 
      { 

       JSONObject menuobj = this.getJSONObject("responseData"); 
       Log.e("XXX", menuobj.toString()); 
       JSONArray array = menuobj.getJSONArray("countries"); 
       TreeMap<String, Integer> map = new TreeMap<String, Integer>(); 
       for (int i = 0; i < array.length(); i++) 
       { 
        JSONObject obj = new JSONObject(); 
        obj = array.getJSONObject(i); 
        if (obj.getString("name").equals(country)) 
        { 
         Log.e("XXX2", obj.toString()); 
         JSONArray arr = obj.getJSONArray("channels"); 
         Log.e("XXX3", String.valueOf(arr.length())); 
         for (int j = 0; j < arr.length(); j++) 
         { 
          JSONObject obj2 = new JSONObject(); 
          obj2 = arr.getJSONObject(i); 
          map.put(obj2.getString("name"), obj2.getInt("id")); 
         } 
         Log.e("XXX4", String.valueOf(map.size())); 
         return map; 
        } 


       } 

的logcat:

02-01 18:24:20.277: ERROR/XXX(3784): {"countries":[{"id":"1","channels":[{"id":"3","name":"ARD"},{"id":"1","name":"ORF 1"},{"id":"2","name":"ORF 2"}],"name":"Ã?sterreich"},{"id":"2","channels":[{"id":"3","name":"ARD"}],"name":"Deutschland"}]} 
02-01 18:24:20.288: ERROR/XXX2(3784): {"id":"1","channels":[{"id":"3","name":"ARD"},{"id":"1","name":"ORF 1"},{"id":"2","name":"ORF 2"}],"name":"Ã?sterreich"} 
02-01 18:24:20.297: ERROR/XXX3(3784): 3 
02-01 18:24:20.307: ERROR/XXX4(3784): 1 

回答

2

我相信:

obj2 = arr.getJSONObject(i); 

應該

obj2 = arr.getJSONObject(j); 

所以你把同一個對象對鍵/值的三倍到地圖中。

+0

+1 - 好點。 – 2011-02-01 18:37:51

0

您需要使用JSONArrayJSONObject

JSONArray resultJson = new JSONArray(responseDataString); 
0

你米發佈一個重要的日誌記錄細節,稱之爲XXX3.5。幾乎可以肯定的是,地圖包含一個元素,因爲每次調用map.put()都會傳入一個與地圖內已有鍵相同的鍵。

現在我期望這些鍵是通道的字符串名稱,它們是不同的,很顯然,這種期望並不成立。添加日誌消息obj2.getString("name")(或者在那裏設置斷點),可以讓您看到映射鍵的實際內容,以及後續調用覆蓋現有映射的原因。爲了區分實際的String和一些僅包含字符串的類,輸出對象的實際類也很有用。

如果這些元素看起來合理,那麼問題可能就是所討論類中的equals()的鬆散定義,它將應該看起來不同的元素等同起來。無論如何,更好的日誌記錄將顯示爲什麼

arr.getJSONObject(0).getString("name").equals(arr.getJSONObject(1).getString("name") 

如果您希望返回false,則返回true。

+0

^^三次ARD 02-01 18:38:46.627:ERROR/XXX3.5(4148):ARD 02-01 18:38:46.627:ERROR/XXX3.5(4148):ARD 02- 01 18:38:46.627:錯誤/ XXX3.5(4148):ARD – user547995 2011-02-01 18:39:37