JSON密钥需要是唯一的吗?

时间:2011-03-15 02:07:52

标签: java json parsing key unique

以下问题与我之前提出的问题有关:Help parsing simple JSON (using JSON for JAVA ME)

JSON密钥需要是唯一的吗?例如,我在解析以下XML时遇到了问题(使用JSON ME):

{"name" : "JACK","name" : "JILL","name" : "JOHN","name" : "JENNY","name" : "JAMES","name" : "JIM"}

而且,显然,它因为键必须是唯一的。我只是想知道在所有情况下是否都是真的。例如,如果我使用的不是JSON ME,我是否可以解析所有这些名称?

感谢。

5 个答案:

答案 0 :(得分:35)

如果您使用多个具有相同名称的密钥,则不会出现“错误”,但在JSON中,具有相同名称的最后一个密钥是将要使用的密钥。

在你的情况下,键“name”最好包含一个数组作为它的值,而不是有多个键“name”。具有两个名称或两个相同属性的相同对象或“事物”没有多大意义。

E.g:

{
  "name" : [ "JOHN", "JACK", "...", ... ]
}

答案 1 :(得分:24)

来自RFC 4627

  

对象结构表示为一对花括号     包含零个或多个名称/值对(或成员)。名字是     串。每个名称后面都有一个冒号,分隔名称     从价值。单个逗号将值与后续值分开     名称。 对象中的名称应该是唯一的。

答案 2 :(得分:3)

jQuery能够解析它。但是如果你试图访问它,它只是回馈最后一个值。

退房 http://jsfiddle.net/MQmM4/2/

所以,我猜这是可解析的,但如果使用相同的密钥,则会覆盖该值。

答案 3 :(得分:3)

这是使用数组的可能解决方案。只使用数组索引

the_json_array.getJSONObject(0);


{"nameList":
[{"name" : "JACK"},
{"name" : "JILL"},
{"name" : "JOHN"},
{"name" : "JENNY"},
{"name" : "JAMES"},
{"name" : "JIM"}]}

答案 4 :(得分:1)

JSON对象如下所示

public JSONObject(Map<?, ?> map) {
    this.map = new HashMap<String, Object>();
    if (map != null) {
        for (final Entry<?, ?> e : map.entrySet()) {
            final Object value = e.getValue();
            if (value != null) {
                this.map.put(String.valueOf(e.getKey()), wrap(value));
            }
        }
    }
}

JSON对象基本上是包含键值对的散列映射。

这就是你每次都被覆盖的原因。为了避免这种情况

  
      
  1. 您必须拥有唯一的键值
  2.   
  3. 或者您应该将键值对作为单个对象包装到数组中
  4.   

请查看此JSON Object java implementation以深入了解JSON。