Python json.JSONEncoder.__init__ Method



The Python json.JSONEncoder.__init__ method initializes an instance of the JSONEncoder class in Python. This method allows customization of the encoding behavior, including indentation, key sorting, and separators.

It is mainly used when creating a custom JSON encoder to format and control how Python objects are serialized into JSON format.

Syntax

Following is the syntax of the Python json.JSONEncoder.__init__ method −

json.JSONEncoder(
    *,
   skipkeys=False,
   ensure_ascii=True,
   check_circular=True,
   allow_nan=True,
   sort_keys=False,
   indent=None,
   separators=None,
   default=None
)

Parameters

This method accepts the following parameters −

  • skipkeys (optional): If True, skips non-string dictionary keys instead of raising an error. Default is False.
  • ensure_ascii (optional): If True, ensures that output is ASCII-safe by escaping non-ASCII characters. Default is True.
  • check_circular (optional): If True, checks for circular references to avoid infinite loops. Default is True.
  • allow_nan (optional): If True, serializes NaN, Infinity, and -Infinity as their JavaScript equivalents. Default is True.
  • sort_keys (optional): If True, sorts dictionary keys in the JSON output. Default is False.
  • indent (optional): Defines the indentation level for pretty-printing. Default is None (no indentation).
  • separators (optional): A tuple specifying item and key-value separators, e.g., (',', ': '). Default is None.
  • default (optional): A custom function that handles non-serializable objects. Default is None.

Return Value

This method does not return any value. It initializes a JSONEncoder object with the specified settings.

Example: Creating a Custom JSON Encoder

In this example, we create an instance of JSONEncoder with indentation and sorted keys −

import json

# Create a JSONEncoder instance with custom settings
encoder = json.JSONEncoder(indent=4, sort_keys=True)

# Python dictionary
data = {"name": "Alice", "age": 25, "city": "New York"}

# Serialize the dictionary
json_output = encoder.encode(data)

print(json_output)

Following is the output obtained −

{
    "age": 25,
    "city": "New York",
    "name": "Alice"
}

Example: Skipping Non-String Keys

If a dictionary contains non-string keys, JSONEncoder will raise an error unless we set the skipkeys parameter to True

import json

# Dictionary with non-string keys
data = {1: "one", "two": 2}

# Create a JSONEncoder instance that skips non-string keys
encoder = json.JSONEncoder(skipkeys=True)

# Serialize the dictionary
json_output = encoder.encode(data)

print(json_output)

We get the output as shown below −

{"1": "one", "two": 2}

Example: Custom Default Function

If an object is not serializable, we can use the default parameter to provide a custom serialization function −

import json
from datetime import datetime

# Custom function to serialize datetime objects
def custom_serializer(obj):
   if isinstance(obj, datetime):
      return obj.strftime("%Y-%m-%d %H:%M:%S")
   raise TypeError(f"Type {type(obj)} not serializable")

# Dictionary containing a datetime object
data = {"name": "Alice", "timestamp": datetime(2025, 2, 19, 12, 30)}

# Create a JSONEncoder instance with a custom default function
encoder = json.JSONEncoder(default=custom_serializer)

# Serialize the dictionary
json_output = encoder.encode(data)

print(json_output)

Following is the output of the above code −

{"name": "Alice", "timestamp": "2025-02-19 12:30:00"}

Example: Compact JSON Output

Using the separators parameter, we can remove extra spaces to produce compact JSON output −

import json

# Create a JSONEncoder instance with compact separators
encoder = json.JSONEncoder(separators=(',', ':'))

# Python dictionary
data = {"name": "Alice", "age": 25, "city": "New York"}

# Serialize the dictionary
json_output = encoder.encode(data)

print(json_output)

The result produced is as shown below −

{"name":"Alice","age":25,"city":"New York"}
python_json.htm
Advertisements