2016-04-11 13 views
0

Ich verwende das NASA Near Earth Object-Array für ein Schülerprojekt und habe Probleme beim Zugriff auf verschachtelte Objekte, die ein Datum und Bindestriche für einen Schlüssel haben, z.Zugriff auf Javascript Objektschlüssel mit Zahlen und Bindestrichen

2016-09-08 : [...] 

Der Fehler, den ich zurückbekomme, ist nur 'undefiniert'.

Der API-Aufruf die ich habe ist:

$(document).ready(function NASAtest() { 
    $.ajax({ 
     type: "GET", 
     url: "https://api.nasa.gov/neo/rest/v1/feed?start_date=2016-09-07&end_date=2016-09-08&api_key=DEMO_KEY", 
     asynch: false, 
     contentType: "application/javascript", 
     dataType: "json",  
     success: function(data) { 
      console.log(data) 
      var recordList = data.near_earth_objects; 
      console.log(recordList); 
      var recordList2 = data.near_earth_objects[2016-09-08]; 
      console.log(recordList2); 

      }  
    }); 
}); 

Beispiel API-Daten:

{ 
    "near_earth_objects": { 
     "2016-09-08": [ 
      { 
       "neo_reference_id": "3726710", 
       "name": "(2015 RC)", 
       "nasa_jpl_url": "http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=3726710", 
       "absolute_magnitude_h": 24.3, 
       "is_potentially_hazardous_asteroid": false, 
      } ] } } 

Siehe Geige: https://jsfiddle.net/lollyborch/v640ocfr/

und JSON-Daten: https://api.nasa.gov/neo/rest/v1/feed?start_date=2016-09-07&end_date=2016-09-08&api_key=DEMO_KEY

würde ich schließlich Ich mag es, über alle Datumsinformationen zu iterieren, um bis zum Ende zu kommen Die Schlüssel wie "absolute_magnitude_h" und "is_potentiial_hazardous_asteroid" für einen Datumsbereich haben aber zu diesem Zeitpunkt Schwierigkeiten, über den Datumsschlüssel hinauszukommen.

Ich habe versucht, mit eckigen Klammern anstelle Punktnotation wie beschrieben und here beschrieben, aber kann nicht scheinen zu sehen, was ich falsch mache.

Alle Ideen auf die richtige Richtung würden sehr geschätzt werden.

+3

Haben Sie versucht, mit Zitaten: 'data.near_earth_objects [ "2015.09.08"]'? – Paul

+0

Bitte beachten Sie außerdem, dass Sie Daten für 201 ** 6 ** abrufen, aber Sie versuchen, Daten für ein Datum in 201 ** 5 ** zu erhalten, also denke ich, dass Sie wollen, data.near_earth_objects ["2016-09- 08 "]'. Nur für den Fall, dass Sie sich immer noch mit dem "undefined" -Fehler herumschlagen. Siehe https://jsfiddle.net/v640ocfr/1/ – Paul

+0

Vielen Dank @Paul. Ich gab mir selbst den Tipp, dass es ein Tippfehler war. Ich habe heute Abend so viele Variationen ausprobiert, dass ich mich nicht erinnern konnte, sie zu aktualisieren. – LollyBee

Antwort

3

Der Name der Eigenschaft lautet 2015-09-08. Sie greifen jedoch auf den Schlüssel 1998 (2015 - 9 - 8) zu. Sie müssen sie in Anführungszeichen wickeln, sonst wird es den Ausdruck auswerten und das Ergebnis davon als Eigenschaftsnamen verwenden:

data.near_earth_objects["2015-09-08"] 

Als Randnotiz, da Sie Punktnotation in Ihrer Frage erwähnen, diese Dies ist ein Fall, in dem Sie anstelle der Punktnotation die Klammernotation verwenden müssen, da der entsprechende Eigenschaftsname in Punktnotation nicht funktioniert.


Having said that, wie Sie weiter unten auf dieser Route zu bewegen, werden Sie wahrscheinlich über den Inhalt des Objekts Iterieren am Ende eher als hartcodierte Namen, an welchem ​​Punkt die Frage Art selbst löst:

for (var neo in data.near_earth_objects) { 
    //neo is now, for instance, "2016-09-07" 
    console.log(neo, data.near_earth_objects[neo]) 
} 
+0

Danke.Kombination von Hinzufügen von Anführungszeichen und Reparieren eines Tippfehlers (2016 vs. 2015). Du hast Recht - ich hätte zum nächsten Schritt einer for-Schleife gehen sollen, die beide Probleme gelöst hätte. – LollyBee

0

Wenn klammert Notation, möchten Sie vielleicht mit Anführungszeichen um den Schlüssel betrachten Sie den Zugriff versucht werden:

var recordList2 = data.near_earth_objects['2016-09-08']; 

können Sie see an example of this being accessed in der Konsole unter:

enter image description here

Verwandte Themen