为什么json会引发此错误?它不应该只是空的吗?

时间:2019-05-24 22:14:28

标签: python json

我有一些代码可以从在线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
    # -------------------------

0 个答案:

没有答案