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

Python如何按顺序检索多JSON文件指定键,解决查询不存在时崩溃问题

多JSON文件按优先级顺序查询实现方案

核心问题原因

直接通过字典[key]的方式访问不存在的键会直接抛出KeyError异常,终止程序运行,现有代码没有对键不存在的场景做处理,所以第一个文件查不到就直接崩溃了。
注意:查询不确定是否存在的键时,优先用key in 字典做存在性判断,或者用字典.get(key)方法,不存在时会返回None不会抛出异常

实现方案

1. 核心逻辑

  • 严格按照EnabledJSONFiles的排列顺序依次读取JSON文件
  • 对每个文件查询目标key,查询成功直接返回结果、终止遍历
  • 查询失败自动进入下一个文件的查询,所有文件都查不到再返回空/提示不存在

2. 完整可运行代码示例

import json

EnabledJSONFiles = ['test.json', 'base.json']

def search_key(target_key: str):
    # 按优先级遍历所有JSON文件
    for file_path in EnabledJSONFiles:
        # 读取解析文件,同时处理文件不存在、格式损坏的异常,避免崩溃
        try:
            with open(file_path, 'r', encoding='utf-8') as f:
                json_data = json.load(f)
        except (json.JSONDecodeError, FileNotFoundError):
            # 当前文件不可用,跳过查询下一个
            continue
        # 判断目标key是否存在,存在直接返回结果
        if target_key in json_data:
            return json_data[target_key]
    # 所有文件都未查询到目标key
    return None

# 调用示例
if __name__ == "__main__":
    user_input = input("请输入要查询的关键词:")
    result = search_key(user_input)
    if result is not None:
        print(f"查询结果:{result}")
    else:
        print("所有文件中均未找到该关键词")

3. 性能优化方案

如果JSON文件不会频繁修改,可以提前把所有文件内容加载到内存中,避免每次查询都重复读磁盘,提升查询效率:

import json

EnabledJSONFiles = ['test.json', 'base.json']
# 程序启动时预加载所有JSON内容到内存
preloaded_json = []
for file_path in EnabledJSONFiles:
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            preloaded_json.append(json.load(f))
    except:
        preloaded_json.append({})

def search_key_fast(target_key: str):
    for data in preloaded_json:
        if target_key in data:
            return data[target_key]
    return None

内容的提问来源于stack exchange,提问作者Kimitzuni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:09:04