2010-06-30 41 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属性的对象的阵列。

只有获得在一个对象中多次定义的属性的最后声明才是预期行为,因此您需要使用某种数组。

相关问题