我正在开发一个Android应用程序。 我必须在PHP中构建一个API,它提供以下JSON
[{"id":"1","number":"2"},{"id":"3","number":"4"},{"id":"5","number":"6"},{"id":"7","number":"8"}]
我正在使用httpClient在php(web服务器)中完成连接的一部分,并将其保存为字符串。
现在我想将它保存在本地集合中(我使用hashmap !!!不知道这是否是最好的!!!!任何建议都是受欢迎的。)因为我的jsonobject定义了数组我要声明如下:{{ 1}}
一般的想法是保存在HashMap<Integer, LinkedHashMap<String, String>> hashmap;
索引中,并在integer
每个jsonobject中保存。我希望成为hashmap的一个实例:
LinkedHashMap<String, String>
失败的代码:
hashmap[0] = {"id":"1","number":"2"}
hashmap[1] = {"id":"3","number":"4"}
hashmap[2] = {"id":"5","number":"6"}
Linkedhashmap始终是最后一个条目 - &gt; 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);
}
但如果我在"id":"7","number":"8"
内声明LinkedHashMap<String, String> linkedmap = new LinkedHashMap<String, String>();
,那就有效。
可以解释一下为什么会发生这种情况吗?
答案 0 :(得分:1)
对评论的回应:“因为json过于简单,重复值的数组。尽管如此,我想了解为什么在for循环中需要弄清楚为了填充hashmap ?????” p>
老问题,但只是为了得到答案。 我能想到开始回答问题的最简单方法是通过以下示例代码:
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());
}
当您在for循环之外/之前声明LinkedHashMap时,您最终得到了LinkedHashMap的一个实例(就像上面的示例代码一样),并且您继续修改for循环中的ONE实例并将其添加到HashMap好像是一个新的/不同的条目。
当您在for循环中声明LinkedHashMap时,每次进行迭代时都创建了一个NEW实例,这意味着您创建的LinkedHashMaps的数量等于jsonarray.length(),将新实例添加到HashMap中每次迭代。
认为应该回答你的问题,但是这些人对Json解析库和使用数组类型解决了你所解决的问题的看法。