以下问题与我之前提出的问题有关: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,我是否可以解析所有这些名称?
感谢。
答案 0 :(得分:35)
如果您使用多个具有相同名称的密钥,则不会出现“错误”,但在JSON中,具有相同名称的最后一个密钥是将要使用的密钥。
在你的情况下,键“name”最好包含一个数组作为它的值,而不是有多个键“name”。具有两个名称或两个相同属性的相同对象或“事物”没有多大意义。
E.g:
{
"name" : [ "JOHN", "JACK", "...", ... ]
}
答案 1 :(得分:24)
来自RFC 4627:
对象结构表示为一对花括号 包含零个或多个名称/值对(或成员)。名字是 串。每个名称后面都有一个冒号,分隔名称 从价值。单个逗号将值与后续值分开 名称。 对象中的名称应该是唯一的。
答案 2 :(得分:3)
答案 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对象基本上是包含键值对的散列映射。
这就是你每次都被覆盖的原因。为了避免这种情况
- 您必须拥有唯一的键值
- 或者您应该将键值对作为单个对象包装到数组中
醇>
请查看此JSON Object java implementation以深入了解JSON。