2010-06-30 64 views
2

我正在玩1.4.1 jquery.parseJSON方法,看起來它將很適合我的項目,它迭代了一個JSON字符串從C#加載。但是,被加載的JSON是一個實體對象,它們在它們內部具有通用集合,因此在JSON字符串中創建了相同的名稱。例如:jQuery.parseJSON不解析如果JSON字符串具有相同名稱的項目

這工作,因爲那裏有唯一的項目有一個名字都將自己:

var obj = jQuery.parseJSON('{\"ItemID\":1014470}'); 
alert(obj.ItemID); 

這工作,但只獲得在JSON字符串中的最後一個項目:

var obj = jQuery.parseJSON('{\"ItemID\":1014470,\"ItemID\":134564879898798}'); 
alert(obj.ItemID); 

所以我想將JSON字符串分隔如下將解決它:

var obj = jQuery.parseJSON('{\"ItemID\":1014470},{\"ItemID\":134564879898798}'); 

哪個當然沒有什麼

我在想,你可以做這樣的事情:

jQuery.each(obj, function(){ 
    // get each ItemID ??? 
}); 

有沒有更好的辦法做這樣的事情?

目前我們使用這些醜陋的JavaScript數組和很多循環方法,我希望jQuery可以提供一種更清晰的遍歷JSON字符串的方法。

+0

我不是JSON Guru,但那是輸出有效嗎?它必須這樣嗎?修復輸出不是更容易嗎? (如果它壞了,就是這樣) – 2010-06-30 23:04:15

+0

啊,我糾正了:「對象內的名字應該是唯一的。」http://tools.ietf.org/html/rfc4627 – 2010-06-30 23:06:37

+0

@Pekka:「SHOULD」顯然意味着什麼除非名稱是唯一的,否則不能使用常規解析器來解析JSON。如果你讓一個Javscript引擎解析它,它也會扔掉除最後一次發生的所有東西。 – Guffa 2010-06-30 23:17:42

回答

3

要重複項目,請使用數組。任一對象的數組:

[{"ItemID":1014470},{"ItemID":134564879898798}] 

或具有一個數組作爲成員的對象:

{"ItemID":[1014470,134564879898798]} 

使用第一個可以循環:

$.each(arr, function(){ 
    alert(this.ItemID); 
}); 

第二可以循環使用:

$.each(obj.ItemID, function(){ 
    alert(this); 
}); 
+0

+1這就是它,輸出是(對於所有意圖和目的)破碎,應該修復。使用的符號不能在對象中工作,後面的鍵將覆蓋前者。 – 2010-06-30 23:26:29

1

如果您願意更改數據格式,則可以使用類似下面的json結構。

[ 
    { 
     "ItemID": 1014470 
    }, 
    { 
     "ItemID": 134564879898798 
    } 
] 

它將建立各自具有所述的ItemID屬性的對象的陣列。

只有獲得在一個對象中多次定義的屬性的最後聲明纔是預期行爲,因此您需要使用某種數組。

相關問題