在JSON.org是JSON代表給定爲重複關鍵字值在JSON
- 名稱/值對的集合的基本數據結構,以及
- 有序的值的列表。
我一直無法找到任何地方是否有與已經解析到當前對象中的同名的第二個成員應該(a)拋出異常或(b)替換現有成員。
這是指定的任何地方?
現有解析器對重複名稱做什麼?
編輯:我正在尋找爲我的分析器定義正確的行爲。
在JSON.org是JSON代表給定爲重複關鍵字值在JSON
我一直無法找到任何地方是否有與已經解析到當前對象中的同名的第二個成員應該(a)拋出異常或(b)替換現有成員。
這是指定的任何地方?
現有解析器對重複名稱做什麼?
編輯:我正在尋找爲我的分析器定義正確的行爲。
JSON是簡單的JavaScript的並且這樣的對象的文字符號的子集,由相同的規則的限制 - 重複鍵將覆蓋該鍵任何先前分配的值,具體的對象內的最新值。考慮賦值給對象屬性;稍後的作業將覆蓋較早的作業。
爲了證明這一點,我建立了一個example here。該代碼顯示在頁面上,並且可以看到,消息框中包含名稱「Barney」。這裏
碼 -
$(function() {
$('#myButton').click(function(e)
{
var myJsonString = "Person = {'firstName':'Fred','lastName':'Flintstone','firstName':'Barney'}";
eval("(" + myJsonString + ")");
alert(Person.firstName);
});
});
順便說一句,我用的eval()這裏的易用性。由於安全問題,我建議使用JSON解析器而不是eval()。
因爲JSON只是Javascript的一個子集,所以它在很大程度上取決於Javascript規範。我個人不知道答案是什麼,但我強烈建議不要依賴這種行爲,如果可能的話。
解析器找到的姓氏被新的名稱取代。它不會帶來希望。
它只是一個Javascript語法的東西。
var json = {};
// lets augment the object
json.one = 1;
json.one = 2; // it gets replaced
什麼不引發異常? OP沒有指定一個工具。你的意思是Javascript不會拋出異常? – 2012-09-21 16:07:27
我很確定您列出的兩種行爲都會被接受,以及其他行爲(使用第一種,使用其中的任何一種)。 :-) 也就是說,這種行爲是從JSON規範POV中未定義的。
作爲一個實際的問題,我使用的實現方法是您提到的任一建議,或者「使用第一個」。
所以不,我不會指望具體的行爲,因爲工具可以選擇做什麼。
我同意不使用eval()。我實際上在Java中使用JSON,因此純粹用作數據封裝,不包括代碼。 – 2009-02-20 00:20:02
順便說一句,謝謝你的優秀迴應;我覺得沒有想過簡單地用JS自己來測試這個問題感到內疚......我想,編程幾乎完全在Java中的問題。 – 2009-02-20 07:40:21