← Back to Blog

10 Python JSON Tricks You Probably Didn't Know

March 18, 2026 3 min read By CodeTidy Team

The JSON Conundrum: Uncovering Hidden Gems in Python

We've all been there - stuck with a JSON parsing error or struggling to serialize a complex Python object. Despite its ubiquity, working with JSON in Python can be a frustrating experience. But fear not, dear developers! Today, we'll explore 10 Python JSON tricks that will make your life easier and your code more efficient.

Table of Contents

  • Custom Encoders: Taking Control of Serialization
  • Object Hooks: Transforming JSON Data on the Fly
  • The default Parameter: A Simple yet Powerful Tool
  • orjson: The Fastest JSON Library You've Never Heard Of
  • Datetime Serialization: A Common Gotcha
  • JSON Tool CLI: A Hidden Gem in Your Terminal

Custom Encoders: Taking Control of Serialization

When working with complex Python objects, serialization can be a challenge. That's where custom encoders come in. By subclassing json.JSONEncoder, we can define our own serialization logic. Let's take a look at an example:

import json
from datetime import datetime

class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.isoformat()
        return super().default(obj)

data = {'created_at': datetime.now()}
print(json.dumps(data, cls=CustomEncoder))

In this example, we define a custom encoder that serializes datetime objects to ISO format. By passing our encoder to json.dumps, we can ensure that our datetime objects are serialized correctly.

Object Hooks: Transforming JSON Data on the Fly

Sometimes, we need to transform JSON data after it's been deserialized. That's where object hooks come in. By passing a function to json.loads or json.load, we can modify the deserialized data on the fly. Here's an example:

import json

def transform_data(data):
    if 'created_at' in data:
        data['created_at'] = datetime.strptime(data['created_at'], '%Y-%m-%dT%H:%M:%S.%f')
    return data

json_data = '{"created_at": "2022-07-25T14:30:00.000000"}'
data = json.loads(json_data, object_hook=transform_data)
print(data)

In this example, we define a function that transforms the created_at field from a string to a datetime object. By passing this function to json.loads, we can transform the data as it's being deserialized.

The default Parameter: A Simple yet Powerful Tool

The default parameter is a lesser-known feature of json.dumps that allows us to specify a default serialization function. This can be useful when working with objects that don't have a natural JSON representation. Here's an example:

import json

def serialize_object(obj):
    if isinstance(obj, object):
        return obj.__dict__
    return obj

data = {'obj': object()}
print(json.dumps(data, default=serialize_object))

In this example, we define a function that serializes objects to their __dict__ attribute. By passing this function to json.dumps, we can serialize objects that wouldn't normally be serializable.

orjson: The Fastest JSON Library You've Never Heard Of

If you're working with large JSON datasets, you may have noticed that the built-in json library can be slow. That's where orjson comes in. orjson is a ultra-fast JSON library that's designed to be a drop-in replacement for the built-in json library. Here's an example:

import orjson
import json

data = {'key': 'value'}
orjson_data = orjson.dumps(data)
json_data = json.dumps(data)
print(orjson_data == json_data)  # True

In this example, we use orjson to serialize a simple dictionary. As you can see, the output is identical to the built-in json library.

Datetime Serialization: A Common Gotcha

One common gotcha when working with JSON in Python is datetime serialization. By default, the built-in json library will raise a TypeError when trying to serialize a datetime object. To avoid this, we can use the default parameter or a custom encoder, as shown earlier.

JSON Tool CLI: A Hidden Gem in Your Terminal

Did you know that Python comes with a built-in JSON tool CLI? The json.tool command allows us to pretty-print JSON data from the terminal. Here's an example:

$ echo '{"key": "value"}' | python -m json.tool
{
    "key": "value"
}

In this example, we use the json.tool command to pretty-print a simple JSON object.

Key Takeaways

  • Use custom encoders to take control of serialization
  • Use object hooks to transform JSON data on the fly
  • Use the default parameter to specify a default serialization function
  • Use orjson for ultra-fast JSON serialization
  • Be aware of datetime serialization gotchas

FAQ

Q: What's the difference between json.dumps and json.dump?

A: json.dumps serializes a Python object to a JSON string, while json.dump serializes a Python object to a file-like object.

Q: How do I serialize a datetime object to JSON?

A: You can use a custom encoder or the default parameter to serialize a datetime object to JSON.

Q: What's the fastest way to serialize JSON data in Python?

A: orjson is currently the fastest JSON library available for Python.

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp