json.dumps() Function Explained

json.dumps() converts a Python object into a JSON-formatted string.

Use it when you want JSON as text, not as a file. This is common when sending data to an API, storing JSON in a variable, or printing JSON for debugging.

Quick example

import json

data = {"name": "Alice", "age": 25}
json_string = json.dumps(data)
print(json_string)

Output:

{"name": "Alice", "age": 25}

Use json.dumps() when you want a JSON string, not a file. It converts Python data like dictionaries and lists into text in JSON format.

What json.dumps() does

json.dumps() takes a Python value and returns a string in JSON format.

Key points:

  • It converts a Python object into a JSON string
  • It returns text, not a Python dictionary or list
  • It is commonly used before sending data to an API or saving JSON text

If you are new to the json module, see the Python JSON module overview.

Basic syntax

The basic form looks like this:

json.dumps(obj, *, skipkeys=False, ensure_ascii=True, indent=None, sort_keys=False)

What this means:

  • obj is the Python object you want to convert
  • The function returns a string
  • Optional arguments let you format the output

A simple example:

import json

numbers = [1, 2, 3]
result = json.dumps(numbers)

print(result)
print(type(result))

Output:

[1, 2, 3]
<class 'str'>

Even though the result looks like a Python list, it is actually a string.

Python types that work with json.dumps()

Many common Python types can be converted directly.

Python typeJSON result
dictJSON object
listJSON array
tupleJSON array
strJSON string
int and floatJSON number
True and Falsetrue and false
Nonenull

Example:

import json

data = {
    "name": "Alice",
    "scores": [95, 88, 91],
    "active": True,
    "nickname": None
}

print(json.dumps(data))

Output:

{"name": "Alice", "scores": [95, 88, 91], "active": true, "nickname": null}

Notice these JSON differences:

  • JSON uses true and false, not True and False
  • JSON uses null, not None
  • JSON uses double quotes for strings

Simple example

Here is a basic dictionary converted to a JSON string:

import json

person = {"name": "Bob", "age": 30}
json_text = json.dumps(person)

print(json_text)
print(type(json_text))

Output:

{"name": "Bob", "age": 30}
<class 'str'>

Important details:

  • The result uses double quotes
  • The result is a string
  • It is JSON-formatted text, not a Python dictionary

If your goal is specifically to convert a dictionary, see how to convert a dictionary to JSON in Python.

Pretty printing with indent

By default, json.dumps() returns compact JSON on one line.

You can make it easier to read with the indent argument:

import json

data = {
    "name": "Alice",
    "age": 25,
    "skills": ["Python", "SQL"]
}

json_text = json.dumps(data, indent=2)
print(json_text)

Output:

{
  "name": "Alice",
  "age": 25,
  "skills": [
    "Python",
    "SQL"
  ]
}

This is useful for:

  • Debugging
  • Logging
  • Reading JSON more easily

It still returns a string.

If you want more formatting examples, see how to pretty print JSON in Python.

Sorting keys

Use sort_keys=True to output dictionary keys in sorted order.

import json

data = {"b": 2, "a": 1, "c": 3}

print(json.dumps(data, sort_keys=True))

Output:

{"a": 1, "b": 2, "c": 3}

This can help when:

  • Comparing JSON output
  • Making output more predictable
  • Keeping test results consistent

You can combine it with indent:

import json

data = {"b": 2, "a": 1, "c": 3}

print(json.dumps(data, indent=2, sort_keys=True))

json.dumps() vs json.dump()

These two functions are similar, but they do different things.

json.dumps()

  • Returns a JSON string
import json

data = {"name": "Alice"}
json_text = json.dumps(data)

print(json_text)

json.dump()

  • Writes JSON directly to a file object
import json

data = {"name": "Alice"}

with open("data.json", "w") as file:
    json.dump(data, file)

Use:

  • json.dumps() when you want a string
  • json.dump() when you want to write to a file

For a full explanation, see json.dump() function explained.

Common errors and limits

Not every Python object can be converted by default.

These often cause problems:

  • set
  • Custom class instances
  • Functions

These usually raise a TypeError.

Example with a set:

import json

data = {"numbers": {1, 2, 3}}
print(json.dumps(data))

This raises an error like:

TypeError: Object of type set is not JSON serializable

How to fix unsupported object errors

A common fix is to convert unsupported values into supported ones before calling json.dumps().

Convert a set to a list

import json

data = {"numbers": list({1, 2, 3})}
print(json.dumps(data))

Convert a custom object to a dictionary

import json

class User:
    def __init__(self, name, age):
        self.name = name
        self.age = age

user = User("Alice", 25)

data = {
    "name": user.name,
    "age": user.age
}

print(json.dumps(data))

If you are seeing this error, read TypeError: Object is not JSON serializable.

Common mistakes

Beginners often run into these problems:

  • Trying to convert a set directly
  • Passing a custom object without converting it first
  • Expecting json.dumps() to write to a file
  • Confusing the returned JSON string with a Python dictionary
  • Forgetting to import the json module

Useful checks while debugging:

import json

data = {"name": "Alice"}

print(type(data))
print(data)
print(type(json.dumps(data)))
print(json.dumps(data, indent=2))

These help you confirm:

  • What type your original data is
  • What the JSON output looks like
  • That json.dumps() returns a string

FAQ

What is the difference between json.dumps() and json.loads()?

json.dumps() converts a Python object to a JSON string. json.loads() converts a JSON string back into a Python object.

See json.loads() function explained.

Does json.dumps() return a dictionary?

No. It returns a string that contains JSON-formatted text.

Can json.dumps() write to a file?

No. Use json.dump() if you want to write JSON directly to a file.

Why does json.dumps() use double quotes?

JSON requires double quotes around string keys and string values.

See also