Need help with your JSON?

Try our JSON Formatter tool to automatically identify and fix syntax errors in your JSON. JSON Formatter tool

Python JSON Formatting Tools and Libraries

Working with JSON (JavaScript Object Notation) is a common task in software development, especially when dealing with data exchange, APIs, and configuration files. While JSON's simple key-value structure is easy for machines to parse, poorly formatted JSON can be difficult for humans to read and debug.

Formatting JSON, often called "pretty-printing", adds indentation, spacing, and sometimes sorts keys to make the structure clear and hierarchical. Python provides excellent built-in tools and libraries to handle JSON formatting efficiently.

Python's Standard `json` Library

The most common and recommended way to format JSON in Python is by using the built-in `json` module. This module provides functions for encoding Python objects into JSON strings (`dumps`) and decoding JSON strings into Python objects (`loads`).

Formatting with json.dumps()

The json.dumps() function is used to serialize a Python object into a JSON formatted string. It offers powerful arguments to control the output format:

  • indent: Specifies the number of spaces (or a string) to use for indentation. Using a positive integer like 4 makes the output human-readable.
  • sort_keys: If set to True, the keys in JSON objects will be sorted alphabetically. This is useful for ensuring consistent output order, which can help with version control diffs.
  • separators: A tuple (item_separator, key_separator). By default, it's (', ', ': ') with spaces. For compact JSON, you can use(',', ':').

Example: Basic Pretty-Printing

import json

data = {
    "name": "Alice",
    "age": 30,
    "isStudent": False,
    "courses": ["Math", "Science", "History"],
    "address": {
        "street": "123 Main St",
        "city": "Anytown"
    }
}

# Pretty-print with 4-space indentation
pretty_json = json.dumps(data, indent=4)
print(pretty_json)

# Output will be formatted like:
# {
#     "name": "Alice",
#     "age": 30,
#     "isStudent": false,
#     "courses": [
#         "Math",
#         "Science",
#         "History"
#     ],
#     "address": {
#         "street": "123 Main St",
#         "city": "Anytown"
#     }
# }

Example: Sorting Keys

import json

data = {
    "name": "Alice",
    "age": 30,
    "isStudent": False
}

# Pretty-print with 2-space indentation and sorted keys
pretty_json_sorted = json.dumps(data, indent=2, sort_keys=True)
print(pretty_json_sorted)

# Output will be:
# {
#   "age": 30,
#   "isStudent": false,
#   "name": "Alice"
# }

Example: Compact Output

import json

data = {
    "name": "Alice",
    "age": 30
}

# Compact JSON output
compact_json = json.dumps(data, separators=(',', ':'))
print(compact_json)

# Output will be:
# {"name":"Alice","age":30}

Formatting Files with json.dump()

If you want to write a Python object directly to a file as formatted JSON, use the json.dump() function. It takes a file-like object as its second argument and supports the same formatting arguments as dumps().

import json

data = {
    "product": "Gadget",
    "price": 19.99,
    "inStock": True
}

# Write to a file with pretty-printing
with open("output.json", "w") as f:
    json.dump(data, f, indent=4)

# The file "output.json" will contain the formatted JSON.

Command-line Formatting with python -m json.tool

Python's standard library includes a command-line tool for validating and pretty-printing JSON. You can access it using the python -m json.tool command. This is incredibly useful for formatting JSON data from files or standard input directly in your terminal without writing a separate script.

Using json.tool

  • From a file:
    python -m json.tool your_file.json
  • From standard input (piping): This is very common, e.g., to format JSON output from another command.
    cat your_file.json | python -m json.tool
    or
    curl -s api.example.com/data | python -m json.tool

By default, json.tool uses an indentation of 4 spaces. As of Python 3.8, you can specify the indent level using the --indent flag.

cat your_file.json | python -m json.tool --indent 2

The tool also includes validation. If the input is not valid JSON, it will report an error.

Beyond Standard Libraries

While the built-in json library is sufficient for most formatting needs, there are other tools and libraries:

  • Third-party Python Libraries: Libraries like orjson, ujson, or pydanticoffer fast JSON serialization/deserialization, sometimes with additional features or performance optimizations. While they serialize Python objects to JSON, their formatting options might be similar to or different from the standard library.
  • Specialized Command-line Tools: Tools like jq are specifically designed for processing, slicing, filtering, mapping, and transforming JSON data from the command line. jq is extremely powerful for complex operations and includes excellent formatting capabilities.
  • Online Formatters: Numerous websites provide online JSON formatting services. Use these with caution, especially for sensitive data, as you're submitting your data to a third-party server. For quick formatting of non-sensitive data, they can be convenient.

For standard formatting tasks within Python scripts or basic command-line pretty-printing, the built-in jsonmodule and python -m json.tool are usually all you need. They are reliable, widely available, and well-documented.

Practical Tips for Developers

  • Debugging: When dealing with complex or nested JSON from an API or file, piping it throughpython -m json.tool is one of the quickest ways to understand its structure and identify missing or incorrect data.
  • Configuration Files: If you're writing application configuration files in JSON, using `indent=4` and `sort_keys=True` ensures they are easy for users to read and that changes between versions are minimal and clear in version control systems like Git.
  • Logging and Output: When logging or printing JSON data, always pretty-print it if it's intended for human consumption. Compact JSON saves space but is unusable for quick manual inspection.
  • Consistency: Agree on a standard indentation level (e.g., 2 or 4 spaces) and whether to sort keys within your team or project to maintain consistency across your codebase.

Conclusion

Python provides robust and easy-to-use tools for formatting JSON data. The standard `json` library, specifically the `dumps()` and `dump()` functions with the `indent` and `sort_keys` arguments, is the go-to solution for formatting JSON within Python scripts. For quick, command-line formatting and validation, `python -m json.tool` is an indispensable utility. Mastering these tools will significantly improve your ability to work efficiently with JSON data in your Python projects.

Need help with your JSON?

Try our JSON Formatter tool to automatically identify and fix syntax errors in your JSON. JSON Formatter tool