Python:如何为API返回的JSON列表数据分配变量
没问题!在Python里处理这种JSON数据并分配变量其实很直接,我给你分几种常见的场景来演示:
处理JSON数据并分配变量的几种方法
首先,你需要先把API返回的JSON字符串转换成Python的原生数据结构(列表+字典),之后就可以轻松提取数据到变量里了。
1. 基础方法:直接提取单个或遍历所有队伍数据
假设你已经通过API获取到了JSON数据(如果是字符串格式,先用json.loads()解析;如果用requests库调用API,直接用response.json()就能得到Python列表)。
示例代码:
import json # 模拟API返回的JSON字符串(你可以替换成实际的API响应) api_response_json = '''[ { "team_id": "FALCONS", "time_data": "2018-05-06T15:25:36.9524691Z", "wins": 11, "crow_size": 19563, "last_game": { "time_data": "2018-05-06T15:17:16.0000000Z", "data": "4e7a-bf0c-a97e5f32f58b", "take_side": "NA" } }, { "team_id": "CARDINALS", "time_data": "2018-05-06T15:25:36.9212380Z", "wins": 14, "crow_size": 26000, "last_game": { "time_data": "2018-05-06T15:17:16.0000000Z", "data": "cd12-ef34-gh56ij78kl90", "take_side": "NA" } } ]''' # 解析JSON为Python列表 teams_list = json.loads(api_response_json) # 提取单个队伍的变量(比如第一个队伍) first_team = teams_list[0] falcon_id = first_team["team_id"] falcon_wins = first_team["wins"] falcon_crowd = first_team["crow_size"] # 处理嵌套的last_game数据 falcon_last_game_time = first_team["last_game"]["time_data"] falcon_last_game_id = first_team["last_game"]["data"] print(f"Falcons: {falcon_wins} wins, last game crowd {falcon_crowd}") print(f"Last game time: {falcon_last_game_time}, ID: {falcon_last_game_id}") # 遍历所有队伍,批量分配变量 print("\n--- All Teams ---") for team in teams_list: team_id = team["team_id"] wins = team["wins"] crowd = team["crow_size"] last_game = team["last_game"] print(f"{team_id}: {wins} wins, last game crowd {crowd}") print(f" Last game: {last_game['time_data']} (ID: {last_game['data']})\n")
2. 更结构化的方法:使用数据类(Dataclasses)
如果你的数据需要频繁使用,或者想要更清晰的结构,可以用Python的dataclasses模块来定义数据模型,这样代码可读性更高,也更易于维护。
示例代码:
from dataclasses import dataclass from datetime import datetime import json # 定义嵌套的LastGame数据类 @dataclass class LastGame: time_data: datetime data: str take_side: str # 定义Team数据类 @dataclass class Team: team_id: str time_data: datetime wins: int crow_size: int last_game: LastGame # 解析JSON并转换为数据类实例 teams_list = json.loads(api_response_json) parsed_teams = [] for team in teams_list: # 把ISO格式的时间字符串转换为datetime对象(方便后续时间处理) team_datetime = datetime.fromisoformat(team["time_data"].replace("Z", "+00:00")) last_game_datetime = datetime.fromisoformat(team["last_game"]["time_data"].replace("Z", "+00:00")) # 创建LastGame实例 last_game = LastGame( time_data=last_game_datetime, data=team["last_game"]["data"], take_side=team["last_game"]["take_side"] ) # 创建Team实例 parsed_team = Team( team_id=team["team_id"], time_data=team_datetime, wins=team["wins"], crow_size=team["crow_size"], last_game=last_game ) parsed_teams.append(parsed_team) # 使用数据类实例 print("--- Structured Team Data ---") for team in parsed_teams: print(f"Team: {team.team_id}") print(f"Recorded at: {team.time_data.strftime('%Y-%m-%d %H:%M:%S')}") print(f"Total wins: {team.wins}") print(f"Last game on: {team.last_game.time_data.strftime('%Y-%m-%d %H:%M:%S')} (ID: {team.last_game.data})\n")
注意事项
- 如果API返回的JSON可能存在缺失的键(比如某个队伍没有
last_game数据),建议使用字典的get()方法来避免KeyError,比如team.get("last_game", {})。 - 如果用
requests库调用API,不需要手动用json.loads(),直接用response.json()就能得到解析后的Python对象。
内容的提问来源于stack exchange,提问作者Jr David
相关产品推荐
相关产品推荐

