2011-03-15 14 views
25

以下問題與我之前詢問過的問題有關:Help parsing simple JSON (using JSON for JAVA ME)做JSON密鑰需要是唯一的嗎?

做的JSON密鑰需要是唯一的嗎?例如,我遇到了麻煩,解析下面的XML(使用JSON ME):

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

,顯然,其由於鍵必須是唯一的。我只是想知道在所有情況下都是如此。例如,如果我使用的不是JSON ME,我是否可以解析所有這些名稱?

謝謝。

+1

[JSON RFC](http://www.ietf.org/rfc/rfc4627.txt)表示「對象中的名稱應該是唯一的」,因此實現將有所不同。您可能會發現一個具有更寬鬆的規則。 – samplebias 2011-03-15 02:15:43

回答

33

如果您使用具有相同名稱的多個密鑰,但沒有「錯誤」,但在JSON中,具有相同名稱的最後一個密鑰是將要使用的密鑰。

在你的情況下,關鍵字「name」會更好地包含一個數組,因爲它的值,而不是有多個鍵「name」。同一個對象或「事物」具有兩個名稱或兩個相同的衝突屬性沒有多大意義。

例如爲:

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

您的回答指的是某個特定實施的行爲,而不是JSON標準。 – 2017-03-22 19:42:12

3

jQuery能夠解析它。但是,如果你嘗試訪問它,它只是放棄最後一個值。

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

因此,它是可分析的,我想,但如果你使用相同的密鑰值被覆蓋。

1

這裏是使用陣列的可能的解決方案。只是使用數組索引

the_json_array.getJSONObject(0); 


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

RFC 4627

一個目的結構被表示爲一對周圍零個或多個名稱/值對(或成員)大括號 的。名稱是 字符串。每個名稱後面都會出現一個冒號,並將名稱與名稱 分開。一個逗號將一個值與以下的名稱分開。 對象內的名稱應該是唯一的。

+2

RFC4627已經被RFC7159廢棄,並且說幾乎相同。 35 35 012 012 012 012 012 012 012 – user454322 2014-04-22 03:57:32

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對象基本上是含有鍵值對一個HashMap中。

這就是爲什麼每次都會被覆蓋的原因。爲了避免這種

  1. 要麼你必須有唯一的鍵值
  2. 或者你應該換行鍵值對個別對象到一個數組

看一看這個JSON Object java implementation到深入瞭解JSON。