如何将Bittrex_v2接口返回结果转为JSON?或修改输出格式
如何将Bittrex_v2库的get_balance()输出转为JSON,或修改库直接输出JSON?
问题背景
我正在使用Bittrex_v2接口封装库,执行以下代码调用get_balance()方法:
b = Bittrex(api_key="myapikey", api_secret="mysecretkey") ba = b.get_balance() print(ba)
但输出内容包含单引号和Decimal('#')格式的数据,无法直接转为JSON。
解决方案一:处理现有输出转为JSON
如果不想修改库代码,可以通过两种方式转换现有输出:
方法1:用自定义JSON编码器处理Decimal类型
如果get_balance()返回的是包含Decimal对象的Python字典,你可以继承json.JSONEncoder来扩展对Decimal类型的支持:
import json from decimal import Decimal class DecimalJSONEncoder(json.JSONEncoder): def default(self, obj): # 把Decimal对象转成浮点数(如果需要保留完整精度,也可以转成字符串) if isinstance(obj, Decimal): return float(obj) # 其他类型交给默认编码器处理 return super().default(obj) # 使用自定义编码器把结果转成JSON字符串 json_result = json.dumps(ba, cls=DecimalJSONEncoder, indent=2) print(json_result)
方法2:处理字符串形式的输出
如果你的输出是带单引号和Decimal('#')的原始字符串(比如直接打印的结果),可以先做字符串替换再解析:
import json import re # 假设raw_output是你拿到的输出字符串 raw_output = """你的输出内容""" # 替换Decimal('xxx')为对应的数值 processed_str = re.sub(r"Decimal\('(\d+\.?\d*)'\)", r"\1", raw_output) # 把单引号替换成双引号(JSON要求必须用双引号) processed_str = processed_str.replace("'", '"') # 解析成JSON对象并格式化输出 json_data = json.loads(processed_str) print(json.dumps(json_data, indent=2))
解决方案二:修改封装库使其直接输出JSON兼容格式
如果你希望库本身返回可直接转JSON的结果,可以修改库的源码:
- 找到库中
get_balance()方法的实现(通常在bittrex.py这类核心文件里) - 在方法返回前,把所有Decimal对象转换为JSON支持的类型(浮点数或字符串),可以选择返回处理后的字典或直接返回JSON字符串。
示例修改:
# 找到get_balance方法,修改成类似这样 import json from decimal import Decimal def get_balance(self): # 原有的请求逻辑(比如发送API请求并解析响应) response = self._request("GET", "/api/v3/balances") # 定义递归转换函数,处理嵌套结构里的Decimal def convert_decimals(obj): if isinstance(obj, dict): return {k: convert_decimals(v) for k, v in obj.items()} elif isinstance(obj, list): return [convert_decimals(item) for item in obj] elif isinstance(obj, Decimal): return float(obj) # 用str(obj)可以保留完整精度 else: return obj processed_data = convert_decimals(response) # 可以返回处理后的字典(方便后续操作),或者直接返回JSON字符串 return processed_data # 如果要直接返回JSON字符串: # return json.dumps(processed_data, indent=2)
你也可以把这个转换逻辑放到库的基础请求方法里,这样所有接口的返回都会自动处理Decimal,不用逐个修改方法。
内容的提问来源于stack exchange,提问作者johnn trann
相关产品推荐
相关产品推荐

