我正从节点服务器向外部API发出请求:
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
为什么呢?如何仅访问元数据或结果字段?
答案 0 :(得分:2)
当你不是json对象时,你正试图使用body。您仅使用JSON.parse来控制日志,但尚未存储值
var jsonBody = JSON.parse(body)
console.log(jsonBody);
console.log(jsonBody.metadata);
或者你可以做到这一点console.log(JSON.parse(body).metadata);
。您正在将主体解析为json,然后从解析的json中获取元数据