Python json.JSONEncoder.iterencode() Method
The Python json.JSONEncoder.iterencode() method is a method of the json.JSONEncoder class that encodes a Python object into a JSON-formatted string. It returns an iterator that yields the encoded string in chunks.
This method is useful when dealing with large datasets, as it avoids creating a single large JSON string in memory.
Syntax
Following is the syntax of the Python json.JSONEncoder.iterencode() method −
json.JSONEncoder().iterencode(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 an iterator that yields the JSON-formatted string in chunks instead of returning it as a whole.
Example: Basic Usage of iterencode()
The iterencode() method encodes a Python object and returns an iterator that produces JSON data in chunks −
import json
# Create an instance of JSONEncoder
encoder = json.JSONEncoder()
# Sample dictionary
data = {"name": "Alice", "age": 25, "city": "London"}
# Encode JSON in chunks using iterencode()
json_iterator = encoder.iterencode(data)
# Print each chunk
print("JSON Output:")
for chunk in json_iterator:
print(chunk, end="")
Following is the output obtained −
JSON Output: {"name": "Alice", "age": 25, "city": "London"}
Example: Streaming Large JSON Data
When dealing with large JSON data, the iterencode() method helps by streaming the data in smaller chunks instead of holding it all in memory −
import json
# Large dictionary with multiple key-value pairs
large_data = {"user" + str(i): i for i in range(1000)}
# Create an instance of JSONEncoder
encoder = json.JSONEncoder()
# Stream JSON data using iterencode()
json_iterator = encoder.iterencode(large_data)
# Write chunks to a file
with open("large_output.json", "w") as file:
for chunk in json_iterator:
file.write(chunk)
Following is the content of large_output.json −
{"user0": 0, "user1": 1, "user2": 2, ..., "user999": 999}
Example: Custom JSON Encoding
We can subclass json.JSONEncoder to customize the encoding process while using the iterencode() method −
import json
# Custom JSON Encoder
class CustomEncoder(json.JSONEncoder):
def iterencode(self, obj):
for chunk in super().iterencode(obj):
yield chunk.upper() # Convert chunks to uppercase
# Sample dictionary
data = {"message": "hello world", "count": 5}
# Create an encoder instance
encoder = CustomEncoder()
# Stream JSON data with custom encoding
json_iterator = encoder.iterencode(data)
# Print transformed chunks
print("Custom JSON Output:")
for chunk in json_iterator:
print(chunk, end="")
We get the output as shown below −
Custom JSON Output: {"MESSAGE": "HELLO WORLD", "COUNT": 5}
Example: Pretty-Printing JSON in Chunks
We can use the indent parameter in JSONEncoder to format JSON output while streaming it in chunks −
import json
# Create an instance of JSONEncoder with indentation
encoder = json.JSONEncoder(indent=4)
# Sample dictionary
data = {"name": "Alice", "age": 25, "city": "London"}
# Stream formatted JSON data in chunks
json_iterator = encoder.iterencode(data)
print("Pretty-Printed JSON Output:")
for chunk in json_iterator:
print(chunk, end="")
The result produced is as shown below −
Pretty-Printed JSON Output:
{
"name": "Alice",
"age": 25,
"city": "London"
}
Example: Writing Large JSON to File in Chunks
Instead of loading an entire JSON string into memory, we can use the iterencode() method to write data to a file in chunks −
import json
# Large data example
large_data = {"item" + str(i): i for i in range(5000)}
# Open a file for writing
with open("stream_output.json", "w") as file:
# Create an instance of JSONEncoder
encoder = json.JSONEncoder()
# Stream JSON data in chunks and write to file
for chunk in encoder.iterencode(large_data):
file.write(chunk)
Following is the content of stream_output.json −
{"item0": 0, "item1": 1, "item2": 2, ..., "item4999": 4999}