Learn to read a JSON file and append JSON data into a file in Python.
1. Steps for Appending to a JSON File
In Python, appending JSON to a file consists of the following steps:
- Read the JSON in Python
dict
orlist
object. - Append the JSON to
dict
(orlist
) object by modifying it. - Write the updated
dict
(orlist
) object into the original file.
Refer to the following articles to learn how to read JSON from a file and write JSON to a file in Python.
2. Appending to a JSON Array using Python List
The users.json
file has a list of 2 users. We will append a third user to it.
[ { "Name": "Person_1", "Age": 11, "Email": "11@gmail.com" }, { "Name": "Person_2", "Age": 22, "Email": "22@gmail.com" } ]
import json from os import path filename = 'c:/temp/users.json' listObj = [] # Check if file exists if path.isfile(filename) is False: raise Exception("File not found") # Read JSON file with open(filename) as fp: listObj = json.load(fp) # Verify existing list print(listObj) print(type(listObj)) listObj.append({ "Name": "Person_3", "Age": 33, "Email": "33@gmail.com" }) # Verify updated list print(listObj) with open(filename, 'w') as json_file: json.dump(listObj, json_file, indent=4, separators=(',',': ')) print('Successfully appended to the JSON file')
The updated JSON file is:
[ { "Name": "Person_1", "Age": 11, "Email": "11@gmail.com" }, { "Name": "Person_2", "Age": 22, "Email": "22@gmail.com" }, { "Name": "Person_3", "Age": 33, "Email": "33@gmail.com" } ]
3. Appending to a JSON Object using Python Dictionary
The users.json
file has a list of 2 users. We will append a new attribute role and modify an existing attribute Age.
{ "Name": "Person_1", "Age": 11, "Email": "11@gmail.com" }
import json from os import path filename = 'c:/temp/users.json' dictObj = [] # Check if file exists if path.isfile(filename) is False: raise Exception("File not found") # Read JSON file with open(filename) as fp: dictObj = json.load(fp) # Verify existing dict print(dictObj) print(type(dictObj)) dictObj.update({"Age": 12,"Role": "Developer"}) # Verify updated dict print(dictObj) with open(filename, 'w') as json_file: json.dump(dictObj, json_file, indent=4, separators=(',',': ')) print('Successfully written to the JSON file')
The updated JSON file is:
{ "Name": "Person_1", "Age": 12, "Email": "11@gmail.com", "Role": "Developer" }
4. AttributeError: ‘dict’ object has no attribute ‘append’
We may get this error if the JSON object read from the json.load()
method is of type dict
.
The first example reads a JSON list [...]
so the loaded object is of type list
. If we are reading a file that has JSON object {...}
then the loaded object will be of type dictionary and the above code will give AttributeError while invoking the list operations.
{'Name': 'Person_1', 'Age': 11, 'Email': '11@gmail.com'} <class 'dict'> Traceback (most recent call last): File "C:\temp\temp.py", line 20, in <module> listObj.append({ AttributeError: 'dict' object has no attribute 'append'
To fix this error, be mindful of what JSON structure you are reading from the JSON file.
- Read JSON object to Python dict object.
- Read JSON array to Python list object.
Happy Learning !!
Comments