You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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的结果,可以修改库的源码:

  1. 找到库中get_balance()方法的实现(通常在bittrex.py这类核心文件里)
  2. 在方法返回前,把所有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:52:16