Python JSON存储异常:用户列表未正确导入,仅存最后一条数据
问题排查与修复方案
核心问题分析
- 冗余无效数据混入列表:第一段代码在输入用户名前就把空字典加入了列表,当输入
q终止时,这条仅含name: q的无效数据也被存进了列表,成为最后一条记录。 - 文件写入被重复覆盖:第二段代码的
store_data函数循环遍历用户列表时,每次都用单个用户字典覆盖写入文件,最终文件只保留最后一次写入的内容(就是那条无效的q数据)。 - 数据读取展示逻辑错误:
show_the_data函数默认读取的是单个用户字典,但我们需要存储的是用户列表,原逻辑只能打印单个字典的键,无法展示所有用户的完整信息。
修正后的第一段代码(store_user_dictionaries.py)
lista_users = [] print('lets create your data, and then store into a file json') while True: name = input('name:') if name == 'q': break # 仅当输入不是q时,才创建用户字典并收集信息 store_data = { 'name': name, 'gmail': '', 'dni': '', } gmail = input('gmail:') store_data['gmail'] = gmail dni = input('dni:') store_data['dni'] = dni lista_users.append(store_data)
修正后的第二段代码
from store_user_dictionaries import lista_users as usersData from pathlib import Path import json def store_data(): path = Path('data_users.json') # 直接把整个用户列表序列化为JSON写入,一次性保存所有数据 content = json.dumps(usersData, indent=4) path.write_text(content) def show_the_data(): path = Path('data_users.json') content = path.read_text() # 读取的是用户列表,遍历每个用户展示完整信息 users_list = json.loads(content) print("These are the results of your data:") for idx, user in enumerate(users_list, 1): print(f"\nUser {idx}:") for k, v in user.items(): print(f" {k}: {v}") store_data() show_the_data()
修正说明
- 调整数据收集逻辑:先判断用户名是否为
q,只有有效输入才创建字典并收集后续信息,避免无效数据混入列表。 - 优化文件写入方式:直接将整个用户列表转为JSON写入文件,不再循环覆盖,确保所有用户数据都被保存。
- 修复数据展示逻辑:适配列表格式的JSON数据,遍历每个用户并完整打印键值对,清晰展示所有用户的信息。
内容的提问来源于stack exchange,提问作者Jose Antonio Camacho Morales
相关产品推荐
相关产品推荐

