#python #json #api
#python #json #API
Вопрос:
Привет, ребята, я вызываю этот API, чтобы увидеть текущие данные о цене из Coingecko, я пытаюсь проанализировать файл json, но продолжаю получать ошибку в своем коде при использовании json.loads. Я импортировал json и все равно получаю эту ошибку
Вот фрагмент моего кода
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 = 'amp;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
Комментарии:
1.
requests.get()
возвращаетResponse
объект. Вызовитеtext()
его, чтобы получить тело ответа какstr
. Проще говоря, вы можете вызватьjson()
, чтобы проанализировать ее напрямую, без необходимости импортироватьjson
отдельно.2. «Я следую примеру из w3schools, но я продолжаю получать сообщение об ошибке» нет, это не так. Почему вы передаете
Response
объектjson.load
? Для начала вы можете просто использоватьresult = r.json()
. Вы могли бы сделатьjson.load(r.text)
, хотя это в основном то же самое, чтоr.json()
3. Не забудьте проверить
r.status_code
, чтобы убедиться, что запрос выполнен успешно (200 — это нормально «хорошо»).
Ответ №1:
json.loads
принимает только типы, перечисленные в вашей ошибке.
requests
метод get возвращает Response
объект, а не один из этих типов. Ссылка W3Schools не является заменой документации модуля запросов Python, поскольку она показывает только строки, а не Response
объекты.
Объекты ответа имеют json()
функцию для получения тела в виде словаря, который вы закомментировали
r = requests.get(url, headers = {'accept': 'application/json'})
y = r.json()
print(y[coin]['usd'])
Ответ №2:
Ваш код почти правильный. Вам нужно только использовать 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 = 'amp;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")