如何在Python中遍历并提取Kraken API返回的未知键名JSON订单数据
处理Kraken API返回的未知键名JSON数据
我完全懂你的困扰——Kraken的OpenOrders接口返回的订单数据里,每个订单的键都是随机生成的唯一ID,没法提前硬编码来获取。不过Python处理这种键未知的字典非常方便,咱们一步步来解决这个问题:
先看你的现有代码
你目前的代码只是打印了原始的JSON数据,没法直接遍历那些订单:
resp = kraken_request("/0/private/TradeBalance", { "nonce": str(int(10000*time.time())), "asset": "USD" }, api_key, api_sec) print("TradeBalance: " + str(resp.json())) resp = kraken_request("/0/private/OpenOrders", { "nonce": str(int(10000*time.time())), "asset": "USD" }, api_key, api_sec) print() print("OpenOrders: " + str(resp.json()))
解决方案:遍历字典的键值对
当你获取到JSON数据后,result.open是一个字典,其中键是订单ID,值是订单的完整信息。我们可以用Python字典的items()方法来遍历这个结构,不需要提前知道键名。
修改后的代码示例
import time import json # 用于格式化输出,可选 # 先获取OpenOrders数据 resp = kraken_request("/0/private/OpenOrders", { "nonce": str(int(10000*time.time())), "asset": "USD" }, api_key, api_sec) order_data = resp.json() # 先检查API是否返回错误 if order_data["error"]: print(f"API请求出错: {order_data['error']}") else: # 拿到所有开放订单的字典 open_orders = order_data["result"]["open"] print("=== 所有开放订单详情 ===") # 遍历每个订单ID和对应的订单信息 for order_id, order_info in open_orders.items(): print(f"\n--- 订单ID: {order_id} ---") # 提取你需要的字段,比如: print(f"订单状态: {order_info['status']}") print(f"交易对: {order_info['descr']['pair']}") print(f"操作类型: {order_info['descr']['type']}") print(f"委托价格: {order_info['descr']['price']}") print(f"委托总量: {order_info['vol']}") print(f"已成交数量: {order_info['vol_exec']}") # 如果需要查看该订单的全部信息,可以用json.dumps格式化输出 # print("\n完整订单信息:") # print(json.dumps(order_info, indent=2))
代码解释
- 错误检查:先判断
error列表是否为空,避免后续处理无效数据。 - 获取订单字典:通过
order_data["result"]["open"]拿到所有开放订单的集合。 - 遍历订单:
open_orders.items()会返回每一组(订单ID, 订单详情)的键值对,你可以直接使用这两个变量来处理数据。 - 提取字段:订单详情本身也是一个字典,你可以通过键名直接获取需要的信息,比如
order_info['descr']['pair']就能拿到交易对。
如果你想一次性输出所有订单的完整信息,只需要取消注释代码里的json.dumps部分,它会把字典格式化成缩进清晰的JSON字符串,方便阅读。
内容的提问来源于stack exchange,提问作者user9467387
相关产品推荐
相关产品推荐

