我怎么看大JSON对象是否包含值?

时间:2010-06-11 08:13:25

标签: javascript jquery json

我正在使用PHP来json编码一个大规模的多维事件数组,所以我得到这样的结果:

var ents = {"7":{"event_id":"7","nn":"The Whisky Drifters","nn_url":"the-whisky-drifters",
  "venue":"The Grain Barge","date_num":"2010-06-11","date_txt":"Friday 11th June",
  "gig_club":"1","sd":"A New Acoustic String Band...","ven_id":"44",
  "art":0},"15":{"event_id":"15","nn":"Bass Kitchen","nn_url":"bass-kitchen",
  "venue":"Timbuk2","date_num":"2010-06-11","date_txt":"Friday 11th June",
  "gig_club":"2","sd":"Hexadecimal \/ DJ Derek \/ Id","ven_id":"21",
  "art":1},

第一个维度是id,请参阅

var ents = {"7":{

因此可以在不检查嵌套对象的情况下获取ID ...

检查我的JSON是否包含ID的最快,最有效的方法是什么?

4 个答案:

答案 0 :(得分:45)

您可以使用hasOwnProperty方法:

if (ents.hasOwnProperty('7')) {
  //..
}

此方法检查对象是否包含指定的属性,无论其值如何。

in运算符更快,因为它不检查继承的属性。

答案 1 :(得分:2)

除了CMS所说的:如果你需要所有属性,你可以使用for ... in循环遍历这些属性:

for (prop in ents) {
  alert(prop); // Shows "7", "15", etc.
  // Accessing the sub-object:
  alert(ents[prop].nn); // Shows the names of each event
}

这也不是“多维数组”。它是一个对象(具有更多嵌套对象)。

答案 2 :(得分:2)

是的,但是你必须在客户端循环完整的json对象。

var JSONobj = ents, yourid;
for(key in JSONobj)
{
   if(((typeof key) == 'number') && key==yourid )
         alert(key);
}

如果您使用的是jQuery,则可以使用$ .each方法从jsonObject中获取键

   var JSONobj = ents, yourid;
        $.each(JSONobj, function(key, value){     
             if(((typeof key) == 'number') && key==yourid )
                 alert(key);
           //ids.push(key);
        });

答案 3 :(得分:-1)

只需使用myObject.has("keyName")即可。这才是真正有效的。