{ "Credentials": [ { "realName": "Jimmy John", "toolsOut": null, "username": "291R" }, { "realName": "Grant Hanson", "toolsOut": null, "username": "98U9" }, { "realName": "Gill French", "toolsOut": null, "username": "F114" } ] }
I have a json file formatted as above and I am trying to have a function delete an entry based on the username input from a user. I want the file to then be overwritten with the entry removed.
I have tried this:
def removeUserFunc(SID): print(SID.get()) with open('Credentials.json','r+') as json_file: data = json.load(json_file) data['Credentials'][:] = [item for item in data['Credentials'] if item['username'] != SID.get()] json_file.seek(0) json.dump(data,json_file,indent=3,sort_keys=True)
It partially works as everything in the Credentials section looks normal, but it appends a strange copied piece to the end that breaks the JSON. Say I was removing Grant and I ran this code, my JSON looks like below:
{ "Credentials": [ { "realName": "Marcus Koga", "toolsOut": null, "username": "291F" }, { "realName": "Gill French", "toolsOut": null, "username": "F114" } ] } "realName": "Gill French", "toolsOut": null, "username": "F114" } ] }
I am relatively new to Python and editing JSONs as well.
Advertisement
Answer
You need to truncate the file after writing:
def removeUserFunc(SID): print(SID.get()) with open('Credentials.json','r+') as json_file: data = json.load(json_file) data['Credentials'][:] = [item for item in data['Credentials'] if item['username'] != SID.get()] json_file.seek(0) json.dump(data,json_file,indent=3,sort_keys=True) json_file.truncate()