JSON访问变量字段

时间:2014-12-22 02:17:16

标签: javascript json node.js

我试图在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.summonnerbody["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");

5 个答案:

答案 0 :(得分:3)

你实际上是在获取JavaScript对象吗?您可能正在获取JSON字符串,您需要将其解析回JavaScript对象...

var newdata = JSON.parse(body);
console.log(newdata.player.id);

根据caniuse.com

,支持不用担心

答案 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);
    });
}