views:

69

answers:

3

I'm using PHP to json encode a massive multi-dimensional array of events, so i get something like this:

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},

the first dimension is the id, see

var ents = {"7":{

So its possible to get the ids without examining the nested objects...

What's the fastest, most efficent way to check if my JSON contains an id?

+2  A: 

You can use the hasOwnProperty method:

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

This method checks if the object has physically the specified property regardless its value.

Is faster than the in operator because it doesn't checks for inherited properties.

CMS
@Haroldo, you want only to check if an specific id (first level property) exits right? or you want to extract all those property names?
CMS
just check if the id exists
Haroldo
+1  A: 

Additionally to what CMS said: If you need all properties, you can loop over the porperties with 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
}

Also that isn't a "multi-dimensional array". It's an object (with more nested objects).

RoToRa
it was a multi-dimensional array when it was in PHP unless i'm mistaken
Haroldo
+1  A: 

yes it is possible but you have to loop through complete json object on client side.

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

if you are using jQuery then you can use $.each method to fetchng keys from jsonObject

   var JSONobj = ents, yourid;
        $.each(JSONobj, function(key, value){     
             if(((typeof key) == 'number') && key==yourid )
                 alert(key);
           //ids.push(key);
        });
Ayaz Alavi
would it be more efficient to check if the value is an integer before seeing if it matches my query id, or do you think im better having a separate object just of ids?
Haroldo
Ayaz Alavi