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

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()

修正说明

  1. 调整数据收集逻辑:先判断用户名是否为q,只有有效输入才创建字典并收集后续信息,避免无效数据混入列表。
  2. 优化文件写入方式:直接将整个用户列表转为JSON写入文件,不再循环覆盖,确保所有用户数据都被保存。
  3. 修复数据展示逻辑:适配列表格式的JSON数据,遍历每个用户并完整打印键值对,清晰展示所有用户的信息。

内容的提问来源于stack exchange,提问作者Jose Antonio Camacho Morales

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:10:54