2017-03-04 7 views
1

私は2つのjson関数を使用しています。ユーザ名を格納し、呼び出されたときにそれらを返すプログラムでloadとdumpを使います。以下は私のコードです:PythonでJson.dumpとJson.loadを使用する

#Saving data for later use using json 

import json 
#Load the username, if it has been stored previously. 
# Otherwise, prompt for the username and store it. 
def get_stored_username(): 
    """Get stored username if available.""" 
    filename = 'username.json' 
    try: 
     with open(filename) as f_obj: 
      username = json.load(f_obj) 
    except FileNotFoundError: 
     return None 
    else: 
     return username 

def get_new_username(): 
    """Prompt for a new username""" 
    username = input("What is your name? ") 
    filename = 'username.json' 
    with open(filename, 'w') as f_obj: 
     json.dump(username, f_obj) 
    return username 

def greet_user(): 
    """Greet the user by name""" 
    username = get_stored_username() 
    if username: 
     correct = input("Are you " + username + "? (y/n) ") 
     if correct == 'y': 
      print("Welcome back, " + username + "!") 
     else: 
      username = get_new_username() 
      print("We'll remember you when you come back, " + username + "!") 
    else: 
     username = get_new_username() 
     print("We'll remember you when you come back, " + username + "!") 

greet_user() 

私は二回get_new_username()関数を実行し、それがうまく働きました。しかし、greet_user()関数を実行すると、次のエラーが発生します。誰もこれを見つけたことはありますか?それを改善するためにあなたは何をしましたか?

Traceback (most recent call last): 
    File "remember_me.py", line 39, in <module> 
    greet_user() 
    File "remember_me.py", line 27, in greet_user 
    username = get_stored_username() 
    File "remember_me.py", line 11, in get_stored_username 
    username = json.load(f_obj) 
    File "/usr/lib/python3.5/json/__init__.py", line 268, in load 
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw) 
    File "/usr/lib/python3.5/json/__init__.py", line 319, in loads 
    return _default_decoder.decode(s) 
    File "/usr/lib/python3.5/json/decoder.py", line 342, in decode 
    raise JSONDecodeError("Extra data", s, end) 
json.decoder.JSONDecodeError: Extra data: line 1 column 15 (char 14) 
+1

まだファイルの内容を見てみましたか? –

+0

ロードしようとしているデータを表示 –

+0

入力した2つの名前がファイルに表示されますが、greet_user関数も同様に機能します。私はちょうどそれを理解し、get_username()を最初に呼び出す必要がありました。ご協力いただきありがとうございます! –

答えて

0

することはできませんファイルにdump()二つの別々のJSONオブジェクト、そしてload()それらを。 load()はファイル内に1つのjsonオブジェクトが存在することを想定しています。

+0

'' open() '' w "'のモードでファイルを切り詰めます。 –

関連する問題