关于java:JSON密钥需要是唯一的吗?

Do JSON keys need to be unique?

本问题已经有最佳答案,请猛点这里访问。

以下问题与我之前提到过的问题有关:帮助解析简单的JSON(使用JSON for JAVA ME)

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

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

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

谢谢。


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

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

例如。:

1
2
3
{
 "name" : ["JOHN","JACK","...", ... ]
}


来自RFC 4627:

An object structure is represented as a pair of curly brackets
surrounding zero or more name/value pairs (or members). A name is a
string. A single colon comes after each name, separating the name
from the value. A single comma separates a value from a following
name. The names within an object SHOULD be unique.


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

1
2
3
4
5
6
7
8
9
10
the_json_array.getJSONObject(0);


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

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

查看
http://jsfiddle.net/MQmM4/2/

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


JSON对象如下所示

1
2
3
4
5
6
7
8
9
10
11
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对象基本上是包含键值对的散列映射。

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

  • Either you must have unique key values
  • Or you should wrap the key value pair as individual objects into an array
  • 看看这个JSON Object java实现,深入了解JSON。