【问题标题】:Need clarification between JSON and java map需要澄清 JSON 和 java map 之间的关系
【发布时间】:2011-12-18 23:02:59
【问题描述】:

我正在开发一个安卓应用程序。 我必须在 PHP 中构建一个 API,它提供以下 JSON 服务

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

我正在使用 httpClient 完成 php(Web 服务器)中的连接部分,并将其保存为字符串。 现在我想将它保存在本地集合中(我使用 hashmap !!!不知道这是否是最好的!!!欢迎任何建议)。因为我的 jsonobject 定义的数组我想声明以下内容:@987654323 @ 一般的想法是在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"

但如果我在for loop 内声明LinkedHashMap&lt;String, String&gt; linkedmap = new LinkedHashMap&lt;String, String&gt;();,它会起作用。

谁能解释一下为什么会这样?

【问题讨论】:

  • 为什么不用像jackson.codehaus.org这样的真正的JSON解析库?
  • 为什么不对 JSON 数组使用数组类型呢?
  • 因为json太简单,重复值的数组。虽然,我想了解为什么linkedhasmap需要在for循环中澄清以填充hashmap?????

标签: json arrays map


【解决方案1】:

回复评论:“因为json太简单,重复值的数组。虽然,我想明白为什么linkedhasmap需要在for循环中澄清才能填充hashmap??????”

老问题,但只是为了得到答案。 我能想到的开始回答问题的最简单方法是通过以下示例代码:

    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 的 ONE 实例(就像上面的示例代码一样),并且您不断在 for 循环中修改该 ONE 实例并将其添加到HashMap 就好像它是一个新的/不同的条目。

当您在 for 循环中声明 LinkedHashMap 时,您每次进行迭代时都会创建一个 NEW 实例,这意味着您创建的 LinkedHashMap 的数量等于 jsonarray.length(),将一个新实例添加到 HashMap 中每次迭代。

认为这应该可以回答您的问题,但是这些人所说的关于 Json 解析库和使用数组类型来解决您正在解决的问题的立场。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多