2011-12-18 18 views
0

私はアンドロイドでアプリケーションを開発しています。 私はHttpClientを持つPHP(Webサーバ)での接続の一部を完了し、それを文字列に保存しています以下のJSONJSONとJavaマップの明確化が必要

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

を提供していたPHPでAPIを構築する必要があります。 今、私は(私はハッシュマップを使用!!!ドン;これは任意の提案は大歓迎です!!!!最善である場合tは知っている)ローカルコレクションにそれを保存したい、私は次のように宣言したいアレイで定義された私のjsonobject .Because:HashMap<Integer, LinkedHashMap<String, String>> hashmap; 一般的な考え方は、integerのインデックスに保存し、LinkedHashMap<String, String>のすべてのjsonオブジェクトに保存することでした。

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

失敗コード: - >"id":"7","number":"8"

しかし、私は宣言をすれば

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は、常に最後のエントリを持っている私が何かになりたいハッシュマップのインスタンスLinkedHashMap<String, String> linkedmap = new LinkedHashMap<String, String>();内はfor loopです。

なぜこのようなことが起こるのか説明できますか?コメントへ

+1

http://jackson.codehaus.orgのような実際のJSON解析ライブラリを使用してみませんか? – fge

+0

JSON配列に配列型を使用してみませんか? –

+0

jsonが単純すぎるので、繰り返し値の配列。しかし、私はなぜ、リンクされたハッシュマップがハッシュマップを満たすためにforループの内部を明確にする必要があるのか​​理解したいのですか? – mpregos

答えて

1

応答:「JSONは単純すぎるので、繰り返される値の配列が、私はハッシュマップを埋めるために、forループ内で明確にする必要がlinkedhasmap理由を理解したい?????。」

古い質問ですが、それに答えるためだけです。私が質問に答えるために開始すると考えることができ 最も簡単な方法は、このサンプルコードである:forループ、あなたのLinkedHashMap(ちょうど1つのインスタンスになってしまった前に/外のLinkedHashMapを宣言

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()); 
} 

上記のsampeコードのように)、forループ内のその1つのインスタンスを変更し、新しい/別のエントリであるかのようにHashMapに追加しました。

for-loop内でLinkedHashMapを宣言したときは、繰り返したたびに作成したLinkedHashMapsの数がjsonarray.length()に等しく、HashMapに新しいインスタンスを追加する繰り返しごとに

あなたの質問に答えるべきだと思うが、あなたが解決している問題のためにJsonがライブラリを解析し、配列タイプを使用していることについて、

関連する問題