如何根据用户输入的序号删除JSON文件中的指定字典元素
完整实现代码
def aktiv_remove_mat(): import json file_path = "/Users/maltheschroderjakobsen/Downloads/projekt/mat.json" # 读取JSON文件内容 with open(file_path, 'r', encoding='utf-8') as f: mat_list = json.load(f) # 生成可选资产列表并打印 mat_aktiver = [] for dct in mat_list: if "navn" in dct: mat_aktiver.append(dct["navn"]) print("Vælg det anlægsaktiv der skal fjernes") for index, item in enumerate(mat_aktiver, start=1): print(index, item) # 输入合法性校验 while True: try: input_index = int(input(f'Skriv tallet på ønsket anlægsaktiv (1-{len(mat_aktiver)}): ')) if 1 <= input_index <= len(mat_aktiver): break print(f"输入无效,请输入1到{len(mat_aktiver)}之间的数字") except ValueError: print("输入无效,请输入合法数字") # 转换序号为列表索引并删除对应元素 del mat_list[input_index - 1] # 回写修改后的内容到原文件 with open(file_path, 'w', encoding='utf-8') as f: json.dump(mat_list, f, indent=2, ensure_ascii=False) print(f"已成功删除序号为{input_index}的资产")
核心逻辑说明
- 索引转换:你打印的选项是从1开始编号的,而Python列表默认是0起始下标,因此删除元素时需要把用户输入的序号减1,才能定位到正确的目标元素。
- 输入校验:增加了循环校验逻辑,避免用户输入非数字、超出可选范围的数值时程序直接崩溃。
- 格式化回写:使用
json.dump()写入修改后的列表时,加indent=2参数可以保持JSON文件的缩进格式,和你原有的文件结构一致,ensure_ascii=False可以避免写入非ASCII字符时出现乱码。 - 资源安全:用
with语句管理文件操作,执行完会自动关闭文件句柄,避免资源泄漏。
内容的提问来源于stack exchange,提问作者Malthe Schrøder
相关产品推荐
相关产品推荐

