【问题标题】:Parsing a JSON string and store in a variable解析 JSON 字符串并存储在变量中
【发布时间】:2022-01-12 03:13:47
【问题描述】:

大家好,我正在调用此 API 以查看来自 Coingecko 的实时价格数据,我正在尝试解析 json 文件,但是当我使用 json.loads 时,我的代码中不断出现错误。我导入了 json 仍然得到这个错误

这是我的代码的 sn-p

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'})
        y = json.loads(r)  
        #print(r.json()[coinprice]['usd']) 

如果我使用此打印功能,我会得到价格,但我希望能够使用该变量并将其传递给另一个类进行一些计算

在使用 Alpaca API 进行纸质交易时,只是尝试制作一个简单的交易机器人来获得乐趣

Traceback (most recent call last):
    File "AlapacaBot.py", line 76, in <module>
     r.GetPrice(Bitcoin)
    File "AlapacaBot.py", line 65, in GetPrice
     y = json.loads(r)  
    File "/usr/lib/python3.8/json/__init__.py", line 341, in loads
     raise TypeError(f'the JSON object must be str, bytes or bytearray, '
TypeError: the JSON object must be str, bytes or bytearray, not Response

我正在按照 w3schools 的示例进行操作,但我不断收到错误消息 https://www.w3schools.com/python/python_json.asp

【问题讨论】:

  • requests.get() 返回一个 Response 对象。在其上调用 text() 以获取响应正文为 str。更简单的说,可以直接调用json()解析,不用单独导入json
  • “我正在按照 w3schools 的示例进行操作,但我不断收到错误消息”不,您不是。为什么要将Response 对象传递给json.load?对于初学者,您可以使用result = r.json()。你可以做json.load(r.text),虽然这与r.json()基本相同
  • 别忘了检查r.status_code以确保请求成功(200是正常的“好”)。

标签: python json api


【解决方案1】:

您的代码几乎是正确的。只需要使用requests.json()来获取json信息

import json
import requests

class LivePrice:   #Coingecko API
    def GetPrice(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'})
        y = r.json()  
        print(y[coinprice]['usd']) 
LivePrice.GetPrice("bitcoin")

【讨论】:

    【解决方案2】:

    json.loads 只接受错误中列出的类型。

    requests get 方法返回一个Response 对象,而不是这些类型之一。 W3Schools 链接不能替代 Python 请求模块文档,因为它只显示字符串,而不是 Response 对象。

    响应对象有一个 json() 函数来获取正文作为字典,您已将其注释掉

    r = requests.get(url, headers = {'accept': 'application/json'})
    y = r.json()
    print(y[coin]['usd']) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-08
      • 2016-09-23
      • 2021-09-20
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多