Python json.JSONEncoder.encode() Method
The Python json.JSONEncoder.encode() method is a method of the json.JSONEncoder class that directly encodes a Python object into a JSON-formatted string.
Unlike json.dumps(), which is a higher-level function, encode() provides lower-level control over the serialization process. It is typically used when customizing the behavior of JSON encoding in a subclass of JSONEncoder.
Syntax
Following is the syntax of the Python json.JSONEncoder.encode() method −
json.JSONEncoder().encode(obj)
Parameters
This method accepts the Python object as a parameter that needs to be serialized into a JSON-formatted string.
Return Value
This method returns a JSON-formatted string representation of the given Python object.
Example: Basic Usage of encode()
The encode() method can be used to convert basic Python objects into JSON-formatted strings −
import json
# Create an instance of JSONEncoder
encoder = json.JSONEncoder()
# Sample dictionary
data = {"name": "Alice", "age": 25, "city": "London"}
# Convert dictionary to JSON string
json_string = encoder.encode(data)
print("JSON Output:", json_string)
Following is the output obtained −
JSON Output: {"name": "Alice", "age": 25, "city": "London"}
Example: Custom JSON Encoding
We can subclass json.JSONEncoder to customize the encoding process and override the encode() method −
import json
# Custom JSON Encoder
class CustomEncoder(json.JSONEncoder):
def encode(self, obj):
# Add a custom message before encoding
json_str = super().encode(obj)
return f"CustomEncoded: {json_str}"
# Create an object of CustomEncoder
encoder = CustomEncoder()
# Sample dictionary
data = {"name": "Bob", "age": 30, "city": "New York"}
# Serialize using custom encoder
json_string = encoder.encode(data)
print("Custom JSON Output:", json_string)
We get the output as shown below −
Custom JSON Output: CustomEncoded: {"name": "Bob", "age": 30, "city": "New York"}
Example: Encoding a Custom Object
By default, json.JSONEncoder.encode() does not support encoding custom Python objects. We can override the default() method to enable custom object encoding −
import json
# Custom class
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# Custom JSON Encoder
class PersonEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Person):
return {"name": obj.name, "age": obj.age}
return super().default(obj)
# Create an object of Person class
person = Person("Charlie", 40)
# Create an encoder instance
encoder = PersonEncoder()
# Serialize object using encode()
json_string = encoder.encode(person)
print("JSON Output:", json_string)
The result produced is as shown below −
JSON Output: {"name": "Charlie", "age": 40}
Example: Pretty-Printing JSON
We can use the indent parameter in json.JSONEncoder to format the JSON output for better readability −
import json
# Create an instance of JSONEncoder with indentation
encoder = json.JSONEncoder(indent=4)
# Sample dictionary
data = {"name": "Alice", "age": 25, "city": "London"}
# Convert dictionary to formatted JSON string
json_string = encoder.encode(data)
print("Pretty-Printed JSON Output:")
print(json_string)
After executing the above code, we get the following output −
Pretty-Printed JSON Output:
{
"name": "Alice",
"age": 25,
"city": "London"
}
Example: Using separators Parameter
The separators parameter allows customization of JSON formatting −
import json
# Create an instance of JSONEncoder with custom separators
encoder = json.JSONEncoder(separators=(",", ":"))
# Sample dictionary
data = {"name": "Alice", "age": 25, "city": "London"}
# Convert dictionary to JSON with custom separators
json_string = encoder.encode(data)
print("Compact JSON Output:", json_string)
Following is the output obtained −
Compact JSON Output: {"name":"Alice","age":25,"city":"London"}