2011-12-18 32 views
0

我正在開發一個android應用程序。 我必須建立在PHP供應以下JSONJSON和java之間需要說明的地圖

[{"id":"1","number":"2"},{"id":"3","number":"4"},{"id":"5","number":"6"},{"id":"7","number":"8"}] 

我完成與HttpClient的在PHP(Web服務器)連接的部分,並將其保存到字符串的API。 現在我想將其保存在本地收集(我用的HashMap !!!不要;知道這是否是最好的!!!!任何建議是歡迎)。因爲我的JSONObject數組的定義,我想聲明如下:HashMap<Integer, LinkedHashMap<String, String>> hashmap; 一般的想法是保存integer一個索引,並在LinkedHashMap<String, String>每個jsonobject。我想的HashMap的實例是什麼:

hashmap[0] = {"id":"1","number":"2"} 
hashmap[1] = {"id":"3","number":"4"} 
hashmap[2] = {"id":"5","number":"6"} 

的代碼失敗:

JSONObject tempjson; 
     hashmap = new HashMap<Integer, LinkedHashMap<String,String>>(); 
     LinkedHashMap<String, String> linkedmap = new LinkedHashMap<String, String>();  
      for(int i=0;i<jsonarray.length();i++) 
      { 
       JSONObject tempjsonobject = jsonarray.getJSONObject(i); 



       linkedmap.put("id", tempjsonobject.getString("id")); 
       linkedmap.put("number", tempjsonobject.getString("id")); 

       hashmap.put(i, linkedmap); 

      } 

LinkedHashMap的一貫的最後一項 - >"id":"7","number":"8"

但是,如果我做的聲明LinkedHashMap<String, String> linkedmap = new LinkedHashMap<String, String>();裏面的for loop它的工作原理。

可以解釋我的人這是爲什麼會發生?

+1

你爲什麼不使用像http://jackson.codehaus.org一個真正的JSON解析庫? – fge 2011-12-18 23:04:41

+0

爲什麼你不使用數組類型的JSON數組? – 2011-12-19 02:42:47

+0

因爲json太簡單了,重複值的數組。雖然,我想了解爲什麼linkedhasmap需要在for循環中進行澄清以便填充hashmap ????? – mpregos 2011-12-19 10:41:07

回答

1

迴應評論:「因爲JSON是太簡單,重複值的數組雖然,我想知道爲什麼linkedhasmap需要,以填補HashMap的澄清裏面的for循環?????」。

老問題,但不僅僅是因爲它的答案的緣故。 我能想到的開始回答這個問題的最簡單的方法是通過此示例代碼:

public static void main(String...s){ 

    LinkedHashMap<String,String> lhMap = new LinkedHashMap<String,String>(); 
    lhMap.put("id", "a"); 
    lhMap.put("id", "b"); 

    //what do you think will be printed here "a" or "b" or "ab"? 
    for(String key : lhMap.keySet()) 
    { 
     System.out.print(lhMap.get(key)); 
    } 
    //confirmation by the map size 
    System.out.println(lhMap.size()); 
} 

當你宣佈的LinkedHashMap外/ for循環,你結束了與LinkedHashMap的(只是一個實例之前像上面的示例代碼一樣),並且您不斷在for循環中修改該ONE實例,並將其添加到HashMap中,就好像它是新的/不同的條目。

當您在for循環中聲明LinkedHashMap時,每次迭代時創建一個NEW實例,這意味着您創建的LinkedHashMaps的數量等於jsonarray.length(),將新實例添加到HashMap爲每一次迭代。

應該回答你的問題,但什麼樣的球員

想想也說過JSON解析庫,並使用數組類型爲你解決立場問題。