请问怎么读取存储在json文件中的字典

#问题背景

自学Python两星期,学到json模块,心血来潮想做一个能够存储账号密码的程序,前面正常,但写到最后,不知道怎么读取存储在json文件中的字典信息,因此一直报错。

#版本环境
版本:Python3.10
环境:Windows10

#期望结果
存储用户输入的信息,包含账号密码和安全问题(作为两组字典存储在新创建的json文件中),然后弹出安全问题,将用户输入的答案同文件中存储的信息对比,回答正确则输出账号与密码,反之输出“回答错误”。

#代码


import json
q1 = input('请输入你的账号:\n')
q2 = input('请输入你的密码:\n')
key_data = {'account': q1, 'key': q2}

with open('user_data.json', 'w', encoding='utf_8') as f:
    json.dump(key_data, f)
    print(f"你的账号已经存储完毕。接下来请设置安全问题:\n")

answer1 = input('你的生日?\n')
answer2 = input('你的姓名?\n')
question = {'birthday': answer1, 'full_name': answer2}

with open('user_data.json', 'a', encoding='utf_8') as ff:
    json.dump(question, ff)
    print(f"安全问题设置完毕。此后完成安全问题的回答即可获取账号与密码。\n")

active1 = input('访问账号密码请输入以下安全问题:\n你的生日?\n')
with open('user_data.json', 'r', encoding='utf_8') as fff:
    call = json.load(fff)
    if active1 == call['birthday']:
        active2 = input('回答正确。进入下个问题:你的姓名?\n')
        if active2 == call['full_name']:
            print('全部回答正确。现在你可以获取你的账号密码了。\n')
            print(call[key_data])
        else:
            print('回答错误。')
    else:
        print('回答错误。')

#报错描述


Traceback (most recent call last):
  File "C:\Users\11479\AppData\Roaming\JetBrains\PyCharmCE2022.2\scratches\scratch_5.py", line 20, in 
    call = json.load(fff)
  File "D:\Python\lib\json\__init__.py", line 293, in load
    return loads(fp.read(),
  File "D:\Python\lib\json\__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "D:\Python\lib\json\decoder.py", line 340, in decode
    raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 33 (char 32)

微调了你的代码,应该可行了
加油,欢迎关注

import json
q1 = input('请输入你的账号:\n')
q2 = input('请输入你的密码:\n')
key_data = {'account': q1, 'key': q2}
# with open('user_data.json', 'w', encoding='utf_8') as f:
#     # json.dump(key_data, f)
print(f"你的账号已经存储完毕。接下来请设置安全问题:\n")
answer1 = input('你的生日?\n')
answer2 = input('你的姓名?\n')
question = {'birthday': answer1, 'full_name': answer2}
# 存储多个字典数据
json_list = []

json_list.append(key_data)
json_list.append(question)
with open('user_data.json', 'w', encoding='utf_8') as ff:
    # 写入list封装的字典
    json.dump(json_list, ff)
    print(f"安全问题设置完毕。此后完成安全问题的回答即可获取账号与密码。\n")
active1 = input('访问账号密码请输入以下安全问题:\n你的生日?\n')
with open('user_data.json', 'r', encoding='utf_8') as fff:
    call = json.load(fff)
    # 先获取字典中的第2个元素,在获取其字典中 的birthday值
    if active1 == call[1]['birthday']:
        active2 = input('回答正确。进入下个问题:你的姓名?\n')
        # 先获取字典中的第2个元素,在获取其字典中 full_name值
        if active2 == call[1]['full_name']:
            print('全部回答正确。现在你可以获取你的账号密码了。\n')
            # 输出用户名和密码
            print(call[0])
        else:
            print('回答错误。')
    else:
        print('回答错误。')