2010-06-11 3 views
20

Ich bin mit PHP zu json ein massiven mehrdimensionales Array von Ereignissen kodieren, so dass ich so etwas wie diese:Wie kann ich feststellen, ob ein großes JSON-Objekt einen Wert enthält?

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

die erste Dimension ist die ID findet

var ents = {"7":{ 

es ist also möglich, die IDs zu erhalten, ohne die verschachtelten Objekte zu untersuchen ...

Was ist die schnellste und effizienteste Möglichkeit zu überprüfen, ob mein JSON eine ID enthält?

Antwort

45

Sie können die hasOwnProperty Methode:

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

Diese prüft Methode, wenn das Objekt die angegebene Eigenschaft unabhängig von ihrem Wert enthält.

Ist schneller als der Operator in, da es nicht nach geerbten Eigenschaften sucht.

+0

@Haroldo, möchten Sie nur prüfen, ob eine bestimmte ID (Eigenschaft der ersten Ebene) richtig beendet? oder möchten Sie alle diese Eigenschaftsnamen extrahieren? – CMS

+0

nur überprüfen, ob die ID existiert – Haroldo

2

Zusätzlich zu dem, was CMS sagte: Wenn Sie alle Eigenschaften benötigen, können Sie Schleife über die porperties mit 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 
} 

Auch das ist kein „mehrdimensionales Array“. Es ist ein Objekt (mit mehr verschachtelten Objekten).

+0

es war ein multidimensionales Array, wenn es in PHP war, es sei denn, ich bin falsch – Haroldo

2

Ja, es ist möglich, aber Sie müssen auf der Client-Seite komplette json-Objekt durchlaufen.

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

wenn Sie jQuery verwenden, dann können Sie $ .each Methode fetchng Schlüssel von JSONObject

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

wäre es effizienter zu überprüfen, ob der Wert eine ganze Zahl ist, bevor zu sehen, ob es meine Abfrage ID entspricht oder zu tun Sie denken, dass ich besser ein separates Objekt nur von IDs habe? – Haroldo

+0

Sie könnten beide Überprüfungen in einer Zeile hinzufügen, d. H. If (((typeof key) == 'number') && key == yourid) Dann brauchen Sie kein Array, um alle IDs zu speichern. –

-1

Nur myObject.has("keyName") verwenden verwenden. Das ist, was wirklich funktioniert.

+0

Nein! Object.has ist keine Funktion. Probieren Sie es aus, und MDN erwähnt es nicht: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object Es ist also nicht "was wirklich funktioniert". – Andrew

Verwandte Themen