Home > Mobile >  Parsing a JSON string and store in a variable
Parsing a JSON string and store in a variable

Time:12-07

Hi Guys I am calling this API to see the live data of a price from Coingecko, I am trying to parse the json file but keep getting a error in my code when i use json.loads. I imported json and still get this error

Here is a snippet of my code

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']) 

if I use this print function i get the price but I want to be able to use the variable and pass it to another class to do some calculation

Just trying to make a simple trading bot for fun while using Alpaca API for paper trading

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

I am following the example from w3schools but I keep getting an error https://www.w3schools.com/python/python_json.asp

CodePudding user response:

json.loads only accepts the types listed in your error.

requests get method returns a Response object, not one of those types. The W3Schools link is not a replacement for the Python Requests module documentation, as it only shows strings, not Response objects.

Response objects have a json() function to get the body as a dictionary, which you commented out

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

CodePudding user response:

Your code is almost correct. You only need to use the requests.json() to retrieve the json information

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")
  • Related