我试图在NodeJS中为Riot(League of legends API)编写一个库,我遇到了以下问题。
我正在做:
function getSummonerProfile(sum) {
var summoner = sum.replace(/\s+/g, '');
request("https://na.api.pvp.net/api/lol/na/v1.4/summoner/by-name/"
+ summoner + "?api_key=" + api_key, function(error, response, body) {
console.log(body);
});
}
getSummonerProfile("some player");
控制台显示:
{
"player": {
"id": 37842773,
"name": "player",
"profileIconId": 548,
"summonerLevel": 30,
"revisionDate": 1368783726000
}
}
现在" player
"是一个变量(函数参数);我该如何访问数据?例如,只有id
。
body.summonner
和body["player"]
抛出undefined
。
编辑1(完整代码):
var request = require("request");
var api_key = 'example';
function getSummonerProfile(sum) {
var summoner = sum.replace(/\s+/g, '');
request("https://na.api.pvp.net/api/lol/na/v1.4/summoner/by-name/"
+ summoner + "?api_key=" + api_key, function(error, response, body) {
console.log(body.summoner.id);
});
}
getSummonerProfile("some player");
答案 0 :(得分:3)
你实际上是在获取JavaScript对象吗?您可能正在获取JSON字符串,您需要将其解析回JavaScript对象...
var newdata = JSON.parse(body);
console.log(newdata.player.id);
,支持不用担心
答案 1 :(得分:1)
你的函数getSummonerProfile只发送一个请求,使用这个请求函数,当请求返回来自服务器端的数据时,它似乎正在处理内部部分(console.log)。所以基本上你应该保存数据而不是console.log行。你可以将它绑定到某个地方或保存到变量。似乎玩家是你正在寻找的身体变量键。
也许是这样的:
var request = require("request");
var api_key = 'example';
var summoners = {};
function getSummonerProfile(sum) {
var summoner = sum.replace(/\s+/g, '');
request("https://na.api.pvp.net/api/lol/na/v1.4/summoner/by-name/" + summoner + "?api_key=" + api_key, function(error, response, body) {
summoners[summoner]=JSON.parse(body);
console.log(summoners[summoner].player.id);
});
}
getSummonerProfile("some player");
答案 2 :(得分:0)
如果您有这样的变量
json_var = {
"player": {
"id": 37842773,
"name": "player",
"profileIconId": 548,
"summonerLevel": 30,
"revisionDate": 1368783726000
}
}
您可以这样做来访问数据
id = json_var["player"]["id"]
答案 3 :(得分:0)
您要做的是JSON反序列化。
如果您使用的是javascript,那么您的问题就有答案:deserialize from json to javascript object
如果您使用的是另一种语言,原理是相同的,您需要有一个与JSON文件的字段匹配的类并使用反序列化器。
答案 4 :(得分:0)
您将获得响应作为jsonstring。要以js对象的形式获得响应,请尝试以下方法:
request({url: "https://na.api.pvp.net/api/lol/na/v1.4/summoner/by-name/" + summoner + "?api_key=" + api_key, json: true}, function(error, response, body) {
console.log(body.player.id);
});
}