0

So i am trying to get a simple response from an api, and when I try to pull a response from the api, I get an error: JSONDecodeError: Expecting value: line 1 column 1 (char 0)

import requests
import json
current = "https://covidtracking.com/api/v1/states/current"
response = requests.get(current)
print(response.status_code)
gg = json.dumps(response.json(), indent = 4)

the traceback is as follows:

---------------------------------------------------------------------------
JSONDecodeError                           Traceback (most recent call last)
<ipython-input-27-c5319b3765a1> in <module>
----> 1 gg = json.dumps(response.json(), indent = 4)

~\anaconda3\lib\site-packages\requests\models.py in json(self, **kwargs)
    895                     # used.
    896                     pass
--> 897         return complexjson.loads(self.text, **kwargs)
    898 
    899     @property

~\anaconda3\lib\json\__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
    346             parse_int is None and parse_float is None and
    347             parse_constant is None and object_pairs_hook is None and not kw):
--> 348         return _default_decoder.decode(s)
    349     if cls is None:
    350         cls = JSONDecoder

~\anaconda3\lib\json\decoder.py in decode(self, s, _w)
    335 
    336         """
--> 337         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    338         end = _w(s, end).end()
    339         if end != len(s):

~\anaconda3\lib\json\decoder.py in raw_decode(self, s, idx)
    353             obj, end = self.scan_once(s, idx)
    354         except StopIteration as err:
--> 355             raise JSONDecodeError("Expecting value", s, err.value) from None
    356         return obj, end

JSONDecodeError: Expecting value: line 1 column 1 (char 0)
​

What exactly am I doing wrong here? I would also appreciate tips on making the code better or more efficient, I am still learning how to code python.

Thank you!

1

1 Answer 1

1

You are trying to use the HTML version of the API. Instead, point your code to use the below URL.

import requests
import json
current = "https://covidtracking.com/api/v1/states/current.json"
response = requests.get(current)
print(response.status_code)
#get the data from the API response as JSON
covid_data = response.json()
#Since we have the data by state, loop through each state
for data in covid_data:
    #read the individual attributes from the data for each state and print / process as required.
    print(f"{data['state']}-{data['positive']}")

Please refer this URL which gives details on the API that returns JSON and the ones that return CSV.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.