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

Django调用Kraken API报错string indices must be integers如何解决?

错误原因

Kraken的/0/public/Assets接口返回的JSON结构包含顶级的error和result两个字段,你直接遍历data变量时,实际遍历的是这两个字段的键名(字符串类型),自然无法读取altname属性。接口的完整返回结构示例如下:

{
  "error": [], // 接口错误信息,为空则代表请求正常
  "result": {
    "XXBT": {
      "altname": "XBT",
      "aclass": "currency",
      // 其余字段省略
    },
    // 其余资产信息省略
  }
}

修复方案

修改views.py中的代码如下:

from django.shortcuts import render
from meal_app.models import Kraken
import requests

def get_krakens(request):
    url ='https://api.kraken.com/0/public/Assets' 
    # 新增超时参数避免程序长时间无响应
    response = requests.get(url, timeout=10)
    data = response.json()

    # 先判断接口是否返回错误
    if data.get('error'):
        # 可自行扩展错误处理逻辑,比如前端展示错误提示
        return render(request, 'krakens/kraken.html', {"error": data['error']})
    
    # 取result下的所有资产信息遍历
    asset_list = data.get('result', {}).values()
    for asset in asset_list:
        # 新增重复判断避免插入重复数据,可根据自己的需求调整
        if not Kraken.objects.filter(name=asset['altname']).exists():
            kraken_data = Kraken(
                name = asset['altname']
            )
            kraken_data.save()
    
    # 遍历完成后再一次查询全量数据,避免循环中重复查询浪费性能
    all_krakens = Kraken.objects.all().order_by('-id')
    return render (request, 'krakens/kraken.html', { "all_krakens": all_krakens} )

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:06:04