Python for循环遍历JSON字典无法获取资产对应available_balance的问题
核心问题定位
- 数据来源认知偏差:
- 你通过bravado接口拿到的是已经解析完成的Python原生元组结构,不需要再手动构造单引号格式的字符串调用
json.loads。实际接口返回的外层是元组:索引0为接口业务返回字典,索引1为ResponseAdapter对象。 - 你手动拼接的
pairs字符串完全不符合JSON规范:JSON强制要求所有键、字符串值使用双引号,单引号属于Python自有语法,再加上你混入了元组外层括号、内存地址文本,根本无法通过标准JSON解析器正常加载。就算你修正了单引号的问题,也完全没有必要做这层字符串转字典的操作——接口已经把JSON响应转成了可直接操作的Python对象。
- 你通过bravado接口拿到的是已经解析完成的Python原生元组结构,不需要再手动构造单引号格式的字符串调用
- 变量名不匹配:代码中你将
result字段的值赋值给了Wallet_balance,但后续循环时尝试遍历balance变量,该变量从未定义,运行时会直接触发NameError。 - 字典遍历逻辑错误:直接对字典做迭代时,拿到的是字典的顶层键(也就是资产代码字符串,比如
"BTC"、"EOS"),而非键对应的嵌套资产信息字典。对字符串直接用['available_balance']取值的操作,不符合Python数据类型规则,必然会报错。
修正后的实现代码
# 直接使用接口返回的原生元组结构(无需手动做JSON解析) # 替换为你实际从bravado客户端拿到的返回值resp resp = ( { 'ext_code': '', 'result': { 'BTC': {'available_balance': 0.00087168, 'cum_realised_pnl': 7.288e-05}, 'EOS': {'available_balance': 0, 'cum_realised_pnl': 0} } }, "<bravado.requests_client.RequestsResponseAdapter object at 0x000002D6F7FEB808>" ) # 提取资产列表字典 wallet_balance = resp[0]['result'] # 推荐用items()直接遍历字典的键值对,可读性最高 for asset_code, asset_detail in wallet_balance.items(): available_balance = asset_detail['available_balance'] print(f"Asset: {asset_code} Balance: {available_balance}")
运行输出结果
Asset: BTC Balance: 0.00087168 Asset: EOS Balance: 0
补充说明:如果后续需要只遍历非零余额的资产,只需要在循环里加一层判断即可,例如:
for asset_code, asset_detail in wallet_balance.items(): balance = asset_detail['available_balance'] if balance > 0: print(f"Asset: {asset_code} Balance: {balance}")
内容的提问来源于stack exchange,提问作者tony selcuk
相关产品推荐
相关产品推荐

