You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何防止JSON文件中无效股票代码被API返回数据覆盖

如何在更新股票数据时保留API无法识别的无效代码?

问题分析

你的代码核心问题在于每次更新时会创建一个空的stock_info字典,仅将API返回的有效股票代码数据写入其中,最后用这个新字典覆盖原有的symbols字段——这直接导致了像ASDF这类API无法识别的无效代码被删除。

修改后的代码

import json
import requests

def updateStocks(api_key):
    try:
        # 读取原有数据,用with语句自动管理文件生命周期
        with open('csv/stocks.json', 'r') as f:
            all_stocks_settings = json.load(f)
        
        stock_info = all_stocks_settings['symbols']
        symbols = list(stock_info.keys())

        # 构建API请求URL,用join优化字符串拼接效率
        url = 'API URL'
        url += ','.join(symbols)
        url += '&apiKey=' + api_key
        
        response = requests.get(url)
        data = response.json()

        # 将API返回数据转换为以symbol为key的字典,避免嵌套循环查找
        api_stock_map = {item['symbol']: item for item in data}

        # 仅更新有API返回数据的条目,原有无效代码条目保持不变
        for symbol in symbols:
            if symbol in api_stock_map:
                stock_data = api_stock_map[symbol]
                stock_info[symbol] = {
                    'current': stock_data['price'],
                    'change': stock_data['change_since'],
                    'percent_change': stock_data['percent']
                }
        
        # 写回更新后的数据,indent参数让JSON格式更易读
        with open('csv/stocks.json', 'w') as f:
            json.dump(all_stocks_settings, f, indent=4)
    except Exception as e:
        # 建议不要静默异常,打印错误便于调试
        print(f"更新失败: {str(e)}")

关键改动说明

  1. 保留原有字典结构:不再初始化空的stock_info,直接基于读取到的原有字典做增量更新,确保无效代码的条目不会被清空。
  2. 优化数据查找逻辑:把API返回的列表转成{symbol: 对应数据}的字典,避免嵌套循环,提升代码执行效率。
  3. 规范文件操作:用with语句替代手动open/close,避免因异常导致文件未关闭的问题。
  4. 可选格式化输出:添加indent=4让写入的JSON文件更易读,不影响功能逻辑。

效果验证

运行修改后的函数后,stocks.json中的ASDF等无效代码条目会被完整保留,而有效代码的价格、涨跌幅等数据会被API返回的最新值更新。

内容的提问来源于stack exchange,提问作者Pissed Off Banker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 22:25:23