调用第三方API返回JSON为List而非Dict的问题求助
问题:第三方API返回List类型JSON,无法提取指定字段
从第三方服务商获取JSON数据时,返回格式为list类型而非预期的dict类型,导致无法正常提取accountNo字段。
请求与解析代码
def bal(number, token): headers = { 'Authorization': 'Bearer ' + token, 'Accept': 'application/json' } response = requests.get('https://api.provider.com/idS' + number, headers=headers) return response.json() # parsing json def parce_bal(jsonnn): f = json.dumps(jsonnn) f = json.loads(f) #for key,value in f.item(): # if key is 'accountNo': # out_date = value out_date = type(f) return out_date balance_json = balance(numberPhone, token) f = parce_balane(balance_json)
运行结果
PS W:\Python\MTS> & W:/Python/P3.10/python.exe w:/Python/Mobile/main.py <class 'list'>
解决方案
1. 问题原因
第三方API返回的JSON本身是数组结构(对应Python的list),而非单个对象(对应Python的dict)。数组中通常包含一个或多个字典元素,每个元素对应一条业务数据。
2. 修正代码并提取字段
先修正代码中的拼写错误(bal被误写为balance、parce_bal被误写为parce_balane),同时去掉不必要的json.dumps+json.loads重复解析操作,直接处理response.json()返回的Python对象:
import requests def get_balance(number, token): headers = { 'Authorization': f'Bearer {token}', 'Accept': 'application/json' } response = requests.get(f'https://api.provider.com/idS{number}', headers=headers) # 打印返回内容,确认数组内的元素结构 print("API返回结构:", response.json()) return response.json() def parse_balance(json_data): # 处理列表类型的返回结果 if isinstance(json_data, list): # 场景1:列表中只有一个账户数据 if len(json_data) > 0: account_no = json_data[0].get('accountNo') return account_no else: return None # 场景2:列表中有多个账户数据,遍历处理 # for item in json_data: # print("账户号:", item.get('accountNo')) # 兼容未来可能返回字典的情况 elif isinstance(json_data, dict): return json_data.get('accountNo') else: return None # 调用示例 balance_data = get_balance(numberPhone, token) target_account_no = parse_balance(balance_data) print("提取的账户号:", target_account_no)
3. 关键注意事项
- 判断字符串键时用
==而非is(is用于判断对象身份,==用于判断值相等) - 字典遍历方法是
dict.items(),而非dict.item()(缺少复数后缀s) - 用
dict.get(key)代替直接取值dict[key],可避免键不存在时抛出异常
内容的提问来源于stack exchange,提问作者Cycl1k
相关产品推荐
相关产品推荐

