需要在JSON和Java map之间进行澄清

时间:2011-12-18 23:03:00

标签: json arrays map

我正在开发一个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>();,那就有效。

可以解释一下为什么会发生这种情况吗?

1 个答案:

答案 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解析库和使用数组类型解决了你所解决的问题的看法。