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}
python_json.htm
Advertisements