python3 json存取输入数据

《python学习:从入门到实践》我仿照书上的一个例子写的。查找用户名,查到就显示,查不到就写入文件。现在用json来存储,只存储一个名字能正常运行。我认为是json没有正确解析,网上找了下也没找到答案。希望大家告诉我,如何修改代码。

import  json
def save_name():
    print("查无此人,请登记。")
    name = input("\n 请输入你的名字:")
    with open('name.json','a') as file:
        json.dump(name,file)
    print("你的名字已经登记"+str(name))
    return name

def find_name(fn):
    try:
        file = open('name.json','r')
    except FileNotFoundError:
       return save_name()
    else:
        name = json.load(file)
        for i in name:
            if fn == i:
                return fn
            else:
              return save_name()
def hello_name():
    name = input("\n 请输入你的名字:")
    print("欢迎你"+str(find_name(name)))
    
hello_name()
阅读 1.9k
1 个回答

先去学学json的格式吧,不能用'a'模式一个一个写open('name.json','a'),你追加的方式等于每一行是一个json,在一起不符合json格式当然解析报错了

import  json
def save_name(name):
    #print("查无此人,请登记。")
    #name = input("\n 请输入你的名字:") 不要再输入了,万一他又输了一个已存在的名字,重复了啊
    with open('name.json','w') as file:
        json.dump(name,file)
    print("你的名字已经登记"+str(name[-1]))
    return name[-1]

def find_name(fn):
    try:
        file = open('name.json','r')
    except FileNotFoundError:
       return save_name([fn])
    else:
        name = json.load(file)
        file.close()
        """for i in name:
            if fn == i:
                return fn
            else:  一次不对就存名字,后面对了你不就错了
              return save_name()"""
        if fn in name:
            return fn
        else:
            name.append(fn)
            return save_name(name)

def hello_name():
    name = input("\n 请输入你的名字:")
    print("欢迎你"+str(find_name(name)))
    
hello_name()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题