为什么parseJSON将我的JavaScript对象包装在一个新对象中?

时间:2014-06-14 05:03:08

标签: javascript jquery json

将此JavaScript对象视为包装为JSON:

vars = $.parseJSON('{"timestamp":1402720347,"AktiveSprak":{"en":{"ID":"en","Norsk_navn":"Engelsk","Lokalt_navn":"English","Bilde":"flagg_en.png","Aktivt":"1"},"no":{"ID":"no","Norsk_navn":"Norsk","Lokalt_navn":"Norsk","Bilde":"flagg_no.png","Aktivt":"1"}}}')

我想迭代对象AktiveSprak,但我无法弄清楚如何。

现在我可以vars.AktiveSprak但是为了使用jQuery的.each函数,对象需要像j $(vars)一样包装在jQuery中。现在,为什么我不能做这些:

$(vars).AktiveSprak.each(function(){})
$(vars)[0].AktiveSprak.each(function(){})
$(vars).find("AktiveSprak").each(function(){})
$(vars)[0].find("AktiveSprak").each(function(){})

2 个答案:

答案 0 :(得分:6)

$(object).each只能在jquery对象上调用以与普通对象一起使用:

$.each(vars.AktiveSprak,function(index,item){});

http://api.jquery.com/jquery.each/

  

$ .each()函数与$(selector).each()不同,即   用于独占迭代jQuery对象。 $ .each()   函数可用于迭代任何集合,无论它是否为   对象或数组。

答案 1 :(得分:1)

即使使用jQuery,也不是每次迭代都必须使用$.each执行。在这种情况下,最好使用JavaScript的内置in迭代器

var s = $.parseJSON('{"timestamp":..., "AktiveSprak":{ "de":..., "no":... }}');
for (var lang in s.AktiveSprak) { 
  console.log( lang ); 
  }