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

Python调用Coingecko API使用json.loads解析响应报TypeError如何解决

问题解决方案

错误根因

requests.get() 执行后返回的是 requests.Response 类型的对象,而非接口返回的原始JSON字符串。json.loads() 仅支持接收字符串、字节、字节数组类型的输入参数,直接传入Response对象就会触发你遇到的TypeError。

两种修复方案

方案1:直接使用requests内置的json解析方法(更推荐)

requests库的Response对象已经内置了json()方法,内部自动完成了JSON解析逻辑,不需要你手动调用json.loads处理,代码更简洁:

import json
import requests

class LivePrice(object):   #Coingecko API
    def GetPrice(self, coin):
        coinprice = coin
        Gecko_endpoint = 'https://api.coingecko.com/api/v3/simple/price?ids='
        currency  = '&vs_currencies=usd'
        url = Gecko_endpoint + coinprice + currency
        r = requests.get(url, headers = {'accept': 'application/json'})
        # 直接调用r.json()获取解析后的字典
        price_data = r.json()
        return price_data[coinprice]['usd']

调用后可以直接拿到价格数值,存入变量即可传递给其他业务类使用。

方案2:手动调用json.loads(适配你原有写法)

如果需要手动走json.loads的解析流程,需要先获取Response对象的原始文本/字节内容,再传入loads方法:

# 把原有y = json.loads(r)替换为以下任意一行即可
y = json.loads(r.text) # 传入响应的原始字符串内容
# 或
y = json.loads(r.content) # 传入响应的原始字节内容

额外优化建议

  • 可以增加异常捕获逻辑,处理请求超时、接口返回异常、币种ID不存在的情况,避免程序直接崩溃
  • 注意CoinGecko的币种ID是小写格式,比如比特币的ID是bitcoin,调用时不要传大写的Bitcoin避免匹配失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:54:00