json.dump() Function Explained
json.dump() writes Python data to a file in JSON format.
Use it when you want to save data like dictionaries or lists into a .json file. This is a common way to store settings, API data, or simple structured data.
Quick example #
import json
data = {"name": "Alice", "age": 30}
with open("data.json", "w") as file:
json.dump(data, file)
Use json.dump() when you want to write Python data directly to a file as JSON.
What json.dump() does #
json.dump():
- Writes Python data to a file in JSON format
- Takes a Python object and a file object
- Is commonly used with dictionaries and lists
- Does not return the JSON string
This part is important:
json.dump()writes to a file- It does not give you the JSON text back as a return value
If you need the JSON text as a string instead, see json.dumps() explained.
Basic syntax #
The basic syntax is:
json.dump(obj, file)
objis the Python data you want to savefilemust be an open file object in write mode- It is usually used inside a
with open(...)block
Example:
import json
data = {"city": "Paris"}
with open("data.json", "w") as file:
json.dump(data, file)
If you are not familiar with opening files, see open() explained and how to write to a file in Python.
Simple working example #
Here is a complete example that writes a dictionary to a JSON file:
import json
person = {
"name": "Alice",
"age": 30,
"is_admin": False
}
with open("data.json", "w") as file:
json.dump(person, file)
What this code does #
- Opens
data.jsonin write mode using"w" - Creates the file if it does not exist
- Overwrites the file if it already exists
- Writes the dictionary as JSON
Resulting file content #
After running the code, data.json will contain:
{"name": "Alice", "age": 30, "is_admin": false}
Notice that JSON uses:
falseinstead of PythonFalsenullinstead of PythonNone
If you want a broader introduction, see the Python JSON module overview.
Common useful options #
json.dump() has several optional arguments that are often useful.
Use indent to make JSON easier to read #
Without indent, JSON is usually written on one line.
import json
data = {"name": "Alice", "age": 30, "skills": ["Python", "SQL"]}
with open("data.json", "w") as file:
json.dump(data, file, indent=2)
Result in the file:
{
"name": "Alice",
"age": 30,
"skills": [
"Python",
"SQL"
]
}
This is often called pretty-printed JSON. For more, see how to pretty-print JSON in Python.
Use sort_keys=True to sort dictionary keys #
import json
data = {"b": 2, "a": 1, "c": 3}
with open("data.json", "w") as file:
json.dump(data, file, indent=2, sort_keys=True)
This writes the keys in alphabetical order:
{
"a": 1,
"b": 2,
"c": 3
}
Use ensure_ascii=False for non-English characters #
By default, some non-English characters are escaped.
import json
data = {"name": "José", "city": "München"}
with open("data.json", "w", encoding="utf-8") as file:
json.dump(data, file, ensure_ascii=False, indent=2)
This keeps the characters readable in the file.
json.dump() vs json.dumps() #
These two functions are similar, but they do different jobs.
json.dump() #
- Writes JSON directly to a file
import json
data = {"name": "Alice"}
with open("data.json", "w") as file:
json.dump(data, file)
json.dumps() #
- Returns JSON as a string
import json
data = {"name": "Alice"}
json_text = json.dumps(data)
print(json_text)
Output:
{"name": "Alice"}
Use:
json.dump()for saving JSON to filesjson.dumps()when you need the JSON text in memory
You can also see how to convert a dictionary to JSON in Python.
What data types work #
json.dump() works with standard JSON-compatible Python types:
dictliststrintfloatboolNone
Nested combinations of these types also work.
Example:
import json
data = {
"user": "Alice",
"age": 30,
"active": True,
"scores": [10, 20, 30],
"profile": {
"country": "UK",
"verified": False
},
"nickname": None
}
with open("data.json", "w") as file:
json.dump(data, file, indent=2)
Types that do not work directly #
Some Python types are not JSON serializable by default, such as:
set- Custom class objects
This example causes an error:
import json
data = {"numbers": {1, 2, 3}}
with open("data.json", "w") as file:
json.dump(data, file)
Typical error:
TypeError: Object of type set is not JSON serializable
To fix this, convert the set to a list first:
import json
data = {"numbers": list({1, 2, 3})}
with open("data.json", "w") as file:
json.dump(data, file)
For this specific problem, see TypeError: Object is not JSON serializable.
Common errors and fixes #
Here are the most common problems beginners run into with json.dump().
1. Passing a file path instead of a file object #
This is wrong:
import json
data = {"name": "Alice"}
json.dump(data, "data.json")
json.dump() expects an open file object, not a file name string.
Correct version:
import json
data = {"name": "Alice"}
with open("data.json", "w") as file:
json.dump(data, file)
2. Using unsupported data types #
This fails because set is not supported:
import json
data = {"items": {"apple", "banana"}}
with open("data.json", "w") as file:
json.dump(data, file)
Fix it by converting the set:
import json
data = {"items": list({"apple", "banana"})}
with open("data.json", "w") as file:
json.dump(data, file)
3. Confusing json.dump() with json.dumps() #
If you want to save to a file, use json.dump().
If you want a string, use json.dumps().
4. Opening the file in the wrong mode #
This is wrong:
import json
data = {"name": "Alice"}
with open("data.json", "r") as file:
json.dump(data, file)
The file is opened in read mode, so Python cannot write to it.
Use write mode:
import json
data = {"name": "Alice"}
with open("data.json", "w") as file:
json.dump(data, file)
5. Trying to save custom objects directly #
This usually fails:
import json
class User:
def __init__(self, name):
self.name = name
user = User("Alice")
with open("data.json", "w") as file:
json.dump(user, file)
Fix it by converting the object to a dictionary:
import json
class User:
def __init__(self, name):
self.name = name
user = User("Alice")
data = {"name": user.name}
with open("data.json", "w") as file:
json.dump(data, file)
Helpful debugging checks #
If json.dump() is failing, these checks can help:
print(type(data))
print(data)
print(json.dumps(data, indent=2))
print(file.mode)
These help you check:
- What type your data is
- What values it contains
- Whether the data can be converted to JSON
- Whether the file is open in the correct mode
FAQ #
What is the difference between json.dump() and json.dumps()? #
json.dump() writes JSON to a file. json.dumps() returns JSON as a string.
Does json.dump() create a file? #
It writes to a file object. If you open a new file in write mode, Python creates it.
Can json.dump() write a list? #
Yes. It can write lists, dictionaries, strings, numbers, booleans, and None.
Why does json.dump() give a TypeError? #
Usually because the data contains a type that JSON cannot serialize, such as a set or custom object.