2017-05-04 3 views
0

ich eine Anfrage an eine externe API von meinem Knotenserver machen:konnte nicht JSON analysieren

request("https://api.data.gov/ed/collegescorecard/v1/schools/?id=168421&api_key=", function(error, response, body) { 
     console.log(JSON.parse(body)); 
     console.log(body.metadata); 
     console.log(JSON.parse(body.metadata)); 

    }); 

Die erste Konsole gibt den Ausgang:

{ metadata: { total: 1, page: 0, per_page: 20 }, 
    results: 
    [ { '1996': [Object], 
     '1997': [Object], 
     '1998': [Object], 
     '1999': [Object], 
     '2000': [Object], 
     '2001': [Object], 
     '2002': [Object], 
     '2003': [Object], 
     '2004': [Object], 
     '2005': [Object], 
     '2006': [Object], 
     '2007': [Object], 
     '2008': [Object], 
     '2009': [Object], 
     '2010': [Object], 
     '2011': [Object], 
     '2012': [Object], 
     '2013': [Object], 
     '2014': [Object], 
     ope6_id: 2233, 
     location: [Object], 
     id: 168421, 
     school: [Object], 
     ope8_id: 223300 } ] } 

Das zweite Protokoll gibt mir eine ‚undefined '

Das dritte Protokoll gibt mir SyntaxError: Unexpected token u

Warum? Wie kann ich nur auf das Metadaten- oder Ergebnisfeld zugreifen?

Antwort

2

Sie versuchen, Körper zu verwenden, wenn dies nicht das JSON-Objekt ist. Sie haben nur dann verwendet JSON.parse log zu trösten, aber noch nicht den Wert gespeichert

var jsonBody = JSON.parse(body) 
console.log(jsonBody); 
console.log(jsonBody.metadata); 

alternativ könnte man diese console.log(JSON.parse(body).metadata); getan haben. Sie analysieren Körper als JSON und dann erhalten Metadaten von diesem geparsten JSON

+0

Fast richtig, das OP * hat * definiert 'Körper', es ist nur die Zeichenfolge als dritter Parameter der Anfrage Rückruf gesendet, nicht das JS-Objekt der zweite Konsole Aussage erwartet – Paul

+0

großartiger Ort, aktualisierte meine Antwort –