从API获取响应时发生JsonDecodeError

时间:2020-05-10 16:51:50

标签: python json api

因此,我尝试从api获取简单响应,而当我尝试从api获取响应时,出现错误: JSONDecodeError:期望值:第1行第1列(字符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)

回溯如下:

---------------------------------------------------------------------------
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)
​

我到底在做什么错?我还希望获得有关使代码更好或更高效的提示,但我仍在学习如何编写python。

谢谢!

1 个答案:

答案 0 :(得分:1)

您正在尝试使用API​​的HTML版本。而是将您的代码指向使用以下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']}")

请参考此URL,其中详细介绍了返回JSON的API和返回CSV的API。