Python 如何调用特定的json数据?

Python 如何调用特定的json数据?,python,json,api,Python,Json,Api,我目前正在从事一个项目,该项目涉及从RiotGames API获取数据,并希望在这个我似乎无法解决的问题上得到一些帮助 守则: import requests r = requests.get(url="https://na.api.pvp.net/api/lol/na/v1.3/stats/by-summoner/7250/ranked?season=SEASON2016&api_key=ABC420") json_data = r.json() get_summoner_data =

我目前正在从事一个项目,该项目涉及从RiotGames API获取数据,并希望在这个我似乎无法解决的问题上得到一些帮助

守则:

import requests
r = requests.get(url="https://na.api.pvp.net/api/lol/na/v1.3/stats/by-summoner/7250/ranked?season=SEASON2016&api_key=ABC420")
json_data = r.json()
get_summoner_data = (json_data["champions"])
print(get_summoner_data)
这就是答案

{"summonerId":7250,"modifyDate":1479970436000,"champions":[{"id":111,"stats":{"totalSessionsPlayed":2,"totalSessionsLost":2,"totalSessionsWon":0,"totalChampionKills":8,"totalDamageDealt":211063,"totalDamageTaken":42772,"mostChampionKillsPerSession":7,"totalMinionKills":318,"totalDoubleKills":1,"totalTripleKills":0,"totalQuadraKills":0,"totalPentaKills":0,"totalUnrealKills":0,"totalDeathsPerSession":15,"totalGoldEarned":21574,"mostSpellsCast":0,"totalTurretsKilled":1,"totalPhysicalDamageDealt":33376,"totalMagicDamageDealt":174433,"totalFirstBlood":0,"totalAssists":11,"maxChampionsKilled":7,"maxNumDeaths":8}},{"id":110,"stats":{"totalSessionsPlayed":3,"totalSessionsLost":3,"totalSessionsWon":0,"totalChampionKills":12,"totalDamageDealt":463303,"totalDamageTaken":49704,"mostChampionKillsPerSession":8,"totalMinionKills":675,"totalDoubleKills":0,"totalTripleKills":0,"totalQuadraKills":0,"totalPentaKills":0,"totalUnrealKills":0,"totalDeathsPerSession":15,"totalGoldEarned":35203,"mostSpellsCast":0,"totalTurretsKilled":2,"totalPhysicalDamageDealt":438295,"totalMagicDamageDealt":22391,"totalFirstBlood":0,"totalAssists":28,"maxChampionsKilled":8,"maxNumDeaths":6}}
所以响应基本上是不同冠军球员的表现数据,在这种情况下由他们的id定义

但假设有人在玩id为111的冠军,现在我想获得所有连接到该id的数据,然后能够打印出某些部分,例如:MaxDeations和MaxGold

但如果找不到该id的数据,则会出现类似“data not found”的消息

如您所见,这里有champion id 111的数据,但我如何调用以仅获取该数据

为了更好地理解,请注意:
一名球员与其他10名球员进行比赛,每队5名。每个人都在打不同的冠军。我想看看玩家是否有任何与冠军的经验(所有数据),因此将检查冠军id是否在摘要中。如果是,我将使用这些数据进行某种性能分析。

因此有很多解决方案,您可以这样做:

def get_champion_info(data, id):
    champions = [c for c in data if c['id'] == id]
    if len(champions):
         return champions[0]
    return "Data not found"

champion_info = get_champion_info(json_data["champions"], 111)

但是返回不同类型的数据(从一个函数返回字符串和dict)不是一个好的解决方案。

因此有很多解决方案,您可以这样做:

def get_champion_info(data, id):
    champions = [c for c in data if c['id'] == id]
    if len(champions):
         return champions[0]
    return "Data not found"

champion_info = get_champion_info(json_data["champions"], 111)
但是,返回不同类型的数据(从一个函数返回字符串和dict)并不是一个好的解决方案。

在中,我认为有一种方法可以回答您的问题:

 GET /api/lol/{region}/v1.2/champion/{id} 
所以我想你可以做:

r = requests.get(url="https://na.api.pvp.net/api/lol/na/v1.3/champion/{id}")
当然,请输入champion id和api密钥。

在中,我认为有一种方法可以回答您的问题:

 GET /api/lol/{region}/v1.2/champion/{id} 
所以我想你可以做:

r = requests.get(url="https://na.api.pvp.net/api/lol/na/v1.3/champion/{id}")

当然,请输入冠军id和api密钥。

非常感谢!最后一个问题是,如果我想打印的不仅仅是MaxNumDeath,我该怎么办?ex-print(I['stats'][“MaxNumDeath”][“totalSessionsWon”])给了我一个TypeError“'int'对象不可订阅”你不能调用
打印(I['stats][“MaxNumDeath”][“totalSessionsWon”])
,因为没有这样的节点。如果您想要“totalSessionsWon”,您可以调用
print(i[“stats”][“totalSessionsWon”]
非常感谢!最后一个问题,如果我想打印的不仅仅是MaxNumDeath,我该怎么办?ex print(i[“stats”][“MaxNumDeath”][“totalSessionsWon”])会给我一个类型错误“'int'对象不可订阅”您不能调用
print(i[“stats”][“MaxNumDeath”][“totalSessionsWon”])
因为没有这样的节点。如果需要“totalSessionsWon”,可以调用
打印(i[“stats”][“totalSessionsWon”]