2017-05-04 120 views
0

我从我的节点服务器进行外部API的请求:无法解析JSON

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)); 

    }); 

第一控制台提供的输出:

{ 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 } ] } 

第二日志给我一个“未定义“

第三日志给我SyntaxError: Unexpected token u

为什么?我如何只访问元数据或结果字段?

回答

2

当您尝试使用body而不是json对象时。您已经使用JSON.parse只允许进行控制台登录,但没有存储的值

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

或者你可以这样做console.log(JSON.parse(body).metadata);。你正在解析body作为json,然后从解析的json中获取元数据

+0

几乎正确的是,OP *具有*定义的“body”,它只是作为请求回调的第三个参数发送的字符串,而不是JS对象第二控制台声明期望 – Paul

+0

伟大的地方,更新我的答案 –