我有一些代码可以从在线API获取一些数据。
我的代码如下:
# --------------------
def __init__(self):
self.api, self.token = self.login()
symbols = self.get_tradeable_assets()
symbols_and_sectors = None
try:
with open('data.json', 'r') as file:
symbols_and_sectors = json.load(file)
except:
pass
if symbols_and_sectors is None:
with open('data.json', 'w') as file:
symbols_and_sectors = self.add_sector_of_stock(symbols)
json.dump(symbols_and_sectors, file)
# ---------------------
该API每月仅允许一定数量的请求:因此,我正在尝试检查数据文件以查看该程序之前是否已运行。如果是这样,请使用该数据。如果不是,则获取数据并保存以供下次使用。
我只有{}
有一个空的json文件
我认为在程序的某个位置,json文件被写为空,即没有{}。
这将引发错误json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
我不太确定为什么要这么做。
后续问题:data.json文件可以容纳多个json输出吗?
Traceback (most recent call last):
File "C:/Python Projects/Algos/Stocks/test.py", line 149, in <module>
main()
File "C:/Python Projects/Algos/Stocks/test.py", line 144, in main
test = Test()
File "C:/Python Projects/Algos/Stocks/test.py", line 73, in __init__
symbols_and_sectors = self.add_sector_of_stock(symbols)
File "C:/Python Projects/Algos/Stocks/test.py", line 131, in add_sector_of_stock
data = r.json()
File "C:\Python Projects\Algos\env\lib\site-packages\requests\models.py", line 897, in json
return complexjson.loads(self.text, **kwargs)
File "C:\Python3\lib\json\__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "C:\Python3\lib\json\decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python3\lib\json\decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
# Get the sector of each stock
# -------------------------
def add_sector_of_stock(self, symbols):
base_url = 'https://cloud.iexapis.com/'
for symbol in symbols:
r = requests.get(base_url + '/stock/%s/company' + "?token=%s" % symbol, self.token)
data = r.json()
return data
# -------------------------