Try it yourself with our free Json Formatter tool — runs entirely in your browser, no signup needed.

How to Format JSON in Python

How to Format JSON in Python

Formatting JSON data is an essential task in many applications, as it makes the data more human-readable and easier to debug. In Python, formatting JSON data can be achieved using the built-in json module. In this guide, we will explore how to format JSON in Python, including a quick example, a step-by-step breakdown, handling edge cases, common mistakes, performance tips, and frequently asked questions.

Quick Example

Here is a minimal example of how to format JSON in Python:

import json

data = {'name': 'John', 'age': 30, 'city': 'New York'}
formatted_json = json.dumps(data, indent=4)
print(formatted_json)

This code will output:

{
    "name": "John",
    "age": 30,
    "city": "New York"
}

Step-by-Step Breakdown

Let's break down the code line by line:

  1. import json: We import the json module, which provides functions for working with JSON data.
  2. data = {'name': 'John', 'age': 30, 'city': 'New York'}: We define a Python dictionary containing some sample data.
  3. formatted_json = json.dumps(data, indent=4): We use the json.dumps() function to convert the Python dictionary to a JSON string. The indent=4 parameter specifies that we want the JSON to be formatted with an indentation of 4 spaces.
  4. print(formatted_json): We print the formatted JSON string to the console.

Handling Edge Cases

Here are some common edge cases to consider when formatting JSON in Python:

Empty/Null Input

If the input data is empty or null, the json.dumps() function will raise a TypeError. To handle this case, you can add a simple check:

data = None
if data is not None:
    formatted_json = json.dumps(data, indent=4)
    print(formatted_json)
else:
    print("Input data is empty or null")

Invalid Input

If the input data is not a valid JSON object (e.g. a string or a number), the json.dumps() function will raise a TypeError. To handle this case, you can use a try-except block:

data = "Invalid JSON"
try:
    formatted_json = json.dumps(data, indent=4)
    print(formatted_json)
except TypeError:
    print("Input data is not a valid JSON object")

Large Input

If the input data is very large, the json.dumps() function may raise a MemoryError. To handle this case, you can use the json.dump() function instead, which writes the JSON data to a file instead of returning it as a string:

import json

data = {'name': 'John', 'age': 30, 'city': 'New York'}
with open('output.json', 'w') as f:
    json.dump(data, f, indent=4)

Unicode/Special Characters

If the input data contains Unicode or special characters, the json.dumps() function will encode them correctly. However, if you need to preserve the original encoding, you can use the ensure_ascii=False parameter:

data = {'name': 'Jöhn', 'age': 30, 'city': 'New York'}
formatted_json = json.dumps(data, indent=4, ensure_ascii=False)
print(formatted_json)

Common Mistakes

Here are three common mistakes developers make when formatting JSON in Python:

  1. Not specifying the indentation: If you don't specify the indentation, the JSON will be formatted with no indentation, making it hard to read.
# Wrong
formatted_json = json.dumps(data)
# Correct
formatted_json = json.dumps(data, indent=4)
  1. Not handling edge cases: If you don't handle edge cases such as empty or invalid input, your code may raise unexpected errors.
# Wrong
formatted_json = json.dumps(data)
# Correct
if data is not None:
    formatted_json = json.dumps(data, indent=4)
else:
    print("Input data is empty or null")
  1. Not using the correct encoding: If you don't use the correct encoding, your JSON data may not be readable.
# Wrong
formatted_json = json.dumps(data, encoding='utf-16')
# Correct
formatted_json = json.dumps(data, encoding='utf-8')

Performance Tips

Here are three practical performance tips for formatting JSON in Python:

  1. Use the indent parameter: Specifying the indentation can make the JSON data more readable, but it can also slow down the formatting process. If performance is critical, consider using a smaller indentation or no indentation at all.
  2. Use the separators parameter: The separators parameter can be used to specify the separators between items in the JSON data. Using a smaller separator can reduce the size of the JSON data and improve performance.
formatted_json = json.dumps(data, indent=4, separators=(',', ':'))
  1. Use a JSON library with better performance: The json module is not the fastest JSON library available. Consider using a library like ujson or jsonpickle for better performance.

FAQ

Q: What is the difference between json.dumps() and json.dump()?

A: json.dumps() returns the JSON data as a string, while json.dump() writes the JSON data to a file.

Q: How can I preserve the original encoding of the input data?

A: Use the ensure_ascii=False parameter when calling json.dumps().

Q: Can I use the json module with other data types besides dictionaries?

A: Yes, the json module can be used with other data types such as lists, tuples, and strings.

Q: How can I handle large input data?

A: Use the json.dump() function instead of json.dumps(), or consider using a streaming JSON library.

Q: What is the default indentation used by the json module?

A: The default indentation used by the json module is 4 spaces.

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp