如何 在 JSON 中 防止 丢失 项 被 覆盖 ?

osh3o9ms  于 2022-11-19  发布在  其他
关注(0)|答案(2)|浏览(102)

我有一个文件“stocks.json”,它存储了从API中检索到的股票价格信息。我编写了一个Python函数,该函数接收“stocks.json”文件中的每个符号,将每个符号添加到API URL中,并使用该URL调用API。然后,该函数接收API中的任何数据,并将其转储到JSON文件中。
现在的问题是,当我在stocks.json文件中添加一个在API中无效的符号时,API不会返回该符号的任何结果,函数会用API中的任何内容覆盖JSON文件,从而将无效的符号从文件中删除。如何才能使无效的符号保留在JSON文件中?

功能:

def updateStocks(api_key):
   
    try:
       
        f = open('csv/stocks.json', 'r')
        all_stocks_settings = json.load(f)
        f.close()
        stock_info = all_stocks_settings['symbols']
        symbols = list(stock_info.keys())
     
   
        url = 'API URL'
        
        for symbol in symbols:
            url += symbol + ','
            
        url += '&apiKey=' + api_key
        response = requests.get(url)
        data = response.json()
       
            
        stock_info = {}

        if len(data) > 0:
            for symbol in symbols:
                for stock in data:
                    if stock['symbol'] == symbol:
                        stock_info[stock['symbol']] = {'current': stock['price'], 'change': stock['change_since'], 'percent_change':stock['percent']}
                    
                    
            all_stocks_settings['symbols'] = stock_info
                
           
            f = open('csv/stocks.json', 'w+')
            json.dump(all_stocks_settings, f)
            f.close()
        
    except Exception as e:
        pass

stock_info(stocks.json文件中的符号)

{"CHKP": {"current": "127.27", "change": "1.68", "percent_change": "1.34"}, "MSFT": {"current": "227.86", "change": "6.37", "percent_change": "2.88"}, "WMT": {"current": "142.52", "change": "1.53", "percent_change": "1.09"}, "HTZ": {"current": "17.90", "change": "0.36", "percent_change": "2.05"}, "NFLX": {"current": "257.01", "change": "-3.84", "percent_change": "-1.47"}, "GOOG": {"current": "88.69", "change": "2.00", "percent_change": "2.31"}, "AAPL": {"current": "138.25", "change": "-0.15", "percent_change": "-0.11"}, "ASDF":{}}

在stock_info列表的末尾,您会看到符号“ASDF”,这在API上不是有效的符号(仅作为示例使用)。

数据(根据stock_info从API检索)

[{"symbol":"CHKP","price":"127.27","close_price":"125.59","change_since":"1.68","percent":"1.34","updated":"11/07/22 15:01:02"},{"symbol":"MSFT","price":"227.86","close_price":"221.49","change_since":"6.37","percent":"2.88","updated":"11/07/22 15:01:03"},{"symbol":"WMT","price":"142.52","close_price":"140.99","change_since":"1.53","percent":"1.09","updated":"11/07/22 15:01:03"},{"symbol":"HTZ","price":"17.90","close_price":"17.54","change_since":"0.36","percent":"2.05","updated":"11/07/22 15:01:03"},{"symbol":"NFLX","price":"257.01","close_price":"260.85","change_since":"-3.84","percent":"-1.47","updated":"11/07/22 15:01:03"},{"symbol":"GOOG","price":"88.69","close_price":"86.69","change_since":"2.00","percent":"2.31","updated":"11/07/22 15:01:03"},{"symbol":"AAPL","price":"138.25","close_price":"138.40","change_since":"-0.15","percent":"-0.11","updated":"11/07/22 15:01:03"}]

正如您所看到的,stock_info中的符号“ASDF”没有显示在API端。
当我运行这个函数时,它会覆盖并删除stocks.json上的符号“ASDF”,因为它只是从API中获取数据并将其转储到JSON文件中。如何使符号“ASDF”保留在JSON文件中?即使“ASDF”没有显示在API中?

6ljaweal

6ljaweal1#

数据(根据stock_info从API检索)

  • 这些数据是对象数组(其中stock是对象)

如果我对这个问题理解正确的话--没有密钥--对于身份来说,它是哪支股票?
在这个对象数组中-被转换为字典(其中key =符号):

stocksWithoutKey = [{"symbol":"CHKP","price":"127.27","close_price":"125.59","change_since":"1.68","percent":"1.34","updated":"11/07/22 15:01:02"},{"symbol":"MSFT","price":"227.86","close_price":"221.49","change_since":"6.37","percent":"2.88","updated":"11/07/22 15:01:03"},{"symbol":"WMT","price":"142.52","close_price":"140.99","change_since":"1.53","percent":"1.09","updated":"11/07/22 15:01:03"},{"symbol":"HTZ","price":"17.90","close_price":"17.54","change_since":"0.36","percent":"2.05","updated":"11/07/22 15:01:03"},{"symbol":"NFLX","price":"257.01","close_price":"260.85","change_since":"-3.84","percent":"-1.47","updated":"11/07/22 15:01:03"},{"symbol":"GOOG","price":"88.69","close_price":"86.69","change_since":"2.00","percent":"2.31","updated":"11/07/22 15:01:03"},{"symbol":"AAPL","price":"138.25","close_price":"138.40","change_since":"-0.15","percent":"-0.11","updated":"11/07/22 15:01:03"}]
stocksWithKey=[]

for stock in stocksWithoutKey:
    vals = {}
    vals[stock['symbol']]=stock
    arr.append(vals)

输出:

[{'CHKP': {'symbol': 'CHKP', 'price': '127.27', 'close_price': '125.59', 'change_since': '1.68', 'percent': '1.34', 'updated': '11/07/22 15:01:02'}}, {'MSFT': {'symbol': 'MSFT', 'price': '227.86', 'close_price': '221.49', 'change_since': '6.37', 'percent': '2.88', 'updated': '11/07/22 15:01:03'}}, {'WMT': {'symbol': 'WMT', 'price': '142.52', 'close_price': '140.99', 'change_since': '1.53', 'percent': '1.09', 'updated': '11/07/22 15:01:03'}}, {'HTZ': {'symbol': 'HTZ', 'price': '17.90', 'close_price': '17.54', 'change_since': '0.36', 'percent': '2.05', 'updated': '11/07/22 15:01:03'}}, {'NFLX': {'symbol': 'NFLX', 'price': '257.01', 'close_price': '260.85', 'change_since': '-3.84', 'percent': '-1.47', 'updated': '11/07/22 15:01:03'}}, {'GOOG': {'symbol': 'GOOG', 'price': '88.69', 'close_price': '86.69', 'change_since': '2.00', 'percent': '2.31', 'updated': '11/07/22 15:01:03'}}, {'AAPL': {'symbol': 'AAPL', 'price': '138.25', 'close_price': '138.40', 'change_since': '-0.15', 'percent': '-0.11', 'updated': '11/07/22 15:01:03'}}]
os8fio9y

os8fio9y2#

已通过删除stock_info = {}修复此问题

相关问题