
- Python - Home
- Python - Overview
- Python - History
- Python - Features
- Python vs C++
- Python - Hello World Program
- Python - Application Areas
- Python - Interpreter
- Python - Environment Setup
- Python - Virtual Environment
- Python - Basic Syntax
- Python - Variables
- Python - Data Types
- Python - Type Casting
- Python - Unicode System
- Python - Literals
- Python - Operators
- Python - Arithmetic Operators
- Python - Comparison Operators
- Python - Assignment Operators
- Python - Logical Operators
- Python - Bitwise Operators
- Python - Membership Operators
- Python - Identity Operators
- Python - Operator Precedence
- Python - Comments
- Python - User Input
- Python - Numbers
- Python - Booleans
- Python - Control Flow
- Python - Decision Making
- Python - If Statement
- Python - If else
- Python - Nested If
- Python - Match-Case Statement
- Python - Loops
- Python - for Loops
- Python - for-else Loops
- Python - While Loops
- Python - break Statement
- Python - continue Statement
- Python - pass Statement
- Python - Nested Loops
- Python Functions & Modules
- Python - Functions
- Python - Default Arguments
- Python - Keyword Arguments
- Python - Keyword-Only Arguments
- Python - Positional Arguments
- Python - Positional-Only Arguments
- Python - Arbitrary Arguments
- Python - Variables Scope
- Python - Function Annotations
- Python - Modules
- Python - Built in Functions
- Python Strings
- Python - Strings
- Python - Slicing Strings
- Python - Modify Strings
- Python - String Concatenation
- Python - String Formatting
- Python - Escape Characters
- Python - String Methods
- Python - String Exercises
- Python Lists
- Python - Lists
- Python - Access List Items
- Python - Change List Items
- Python - Add List Items
- Python - Remove List Items
- Python - Loop Lists
- Python - List Comprehension
- Python - Sort Lists
- Python - Copy Lists
- Python - Join Lists
- Python - List Methods
- Python - List Exercises
- Python Tuples
- Python - Tuples
- Python - Access Tuple Items
- Python - Update Tuples
- Python - Unpack Tuples
- Python - Loop Tuples
- Python - Join Tuples
- Python - Tuple Methods
- Python - Tuple Exercises
- Python Sets
- Python - Sets
- Python - Access Set Items
- Python - Add Set Items
- Python - Remove Set Items
- Python - Loop Sets
- Python - Join Sets
- Python - Copy Sets
- Python - Set Operators
- Python - Set Methods
- Python - Set Exercises
- Python Dictionaries
- Python - Dictionaries
- Python - Access Dictionary Items
- Python - Change Dictionary Items
- Python - Add Dictionary Items
- Python - Remove Dictionary Items
- Python - Dictionary View Objects
- Python - Loop Dictionaries
- Python - Copy Dictionaries
- Python - Nested Dictionaries
- Python - Dictionary Methods
- Python - Dictionary Exercises
- Python Arrays
- Python - Arrays
- Python - Access Array Items
- Python - Add Array Items
- Python - Remove Array Items
- Python - Loop Arrays
- Python - Copy Arrays
- Python - Reverse Arrays
- Python - Sort Arrays
- Python - Join Arrays
- Python - Array Methods
- Python - Array Exercises
- Python File Handling
- Python - File Handling
- Python - Write to File
- Python - Read Files
- Python - Renaming and Deleting Files
- Python - Directories
- Python - File Methods
- Python - OS File/Directory Methods
- Python - OS Path Methods
- Object Oriented Programming
- Python - OOPs Concepts
- Python - Classes & Objects
- Python - Class Attributes
- Python - Class Methods
- Python - Static Methods
- Python - Constructors
- Python - Access Modifiers
- Python - Inheritance
- Python - Polymorphism
- Python - Method Overriding
- Python - Method Overloading
- Python - Dynamic Binding
- Python - Dynamic Typing
- Python - Abstraction
- Python - Encapsulation
- Python - Interfaces
- Python - Packages
- Python - Inner Classes
- Python - Anonymous Class and Objects
- Python - Singleton Class
- Python - Wrapper Classes
- Python - Enums
- Python - Reflection
- Python Errors & Exceptions
- Python - Syntax Errors
- Python - Exceptions
- Python - try-except Block
- Python - try-finally Block
- Python - Raising Exceptions
- Python - Exception Chaining
- Python - Nested try Block
- Python - User-defined Exception
- Python - Logging
- Python - Assertions
- Python - Built-in Exceptions
- Python Multithreading
- Python - Multithreading
- Python - Thread Life Cycle
- Python - Creating a Thread
- Python - Starting a Thread
- Python - Joining Threads
- Python - Naming Thread
- Python - Thread Scheduling
- Python - Thread Pools
- Python - Main Thread
- Python - Thread Priority
- Python - Daemon Threads
- Python - Synchronizing Threads
- Python Synchronization
- Python - Inter-thread Communication
- Python - Thread Deadlock
- Python - Interrupting a Thread
- Python Networking
- Python - Networking
- Python - Socket Programming
- Python - URL Processing
- Python - Generics
- Python Libraries
- NumPy Tutorial
- Pandas Tutorial
- SciPy Tutorial
- Matplotlib Tutorial
- Django Tutorial
- OpenCV Tutorial
- Python Miscellenous
- Python - Date & Time
- Python - Maths
- Python - Iterators
- Python - Generators
- Python - Closures
- Python - Decorators
- Python - Recursion
- Python - Reg Expressions
- Python - PIP
- Python - Database Access
- Python - Weak References
- Python - Serialization
- Python - Templating
- Python - Output Formatting
- Python - Performance Measurement
- Python - Data Compression
- Python - CGI Programming
- Python - XML Processing
- Python - GUI Programming
- Python - Command-Line Arguments
- Python - Docstrings
- Python - JSON
- Python - Sending Email
- Python - Further Extensions
- Python - Tools/Utilities
- Python - GUIs
- Python Advanced Concepts
- Python - Abstract Base Classes
- Python - Custom Exceptions
- Python - Higher Order Functions
- Python - Object Internals
- Python - Memory Management
- Python - Metaclasses
- Python - Metaprogramming with Metaclasses
- Python - Mocking and Stubbing
- Python - Monkey Patching
- Python - Signal Handling
- Python - Type Hints
- Python - Automation Tutorial
- Python - Humanize Package
- Python - Context Managers
- Python - Coroutines
- Python - Descriptors
- Python - Diagnosing and Fixing Memory Leaks
- Python - Immutable Data Structures
- Python Useful Resources
- Python - Questions & Answers
- Python - Interview Questions & Answers
- Python - Online Quiz
- Python - Quick Guide
- Python - Reference
- Python - Cheatsheet
- Python - Projects
- Python - Useful Resources
- Python - Discussion
- Python Compiler
- NumPy Compiler
- Matplotlib Compiler
- SciPy Compiler
Python json.decoder.JSONDecoder.object_hook Attribute
The Python json.decoder.JSONDecoder.object_hook attribute is used to specify a custom function for decoding JSON objects into custom Python objects.
It is useful when you want to deserialize JSON dictionaries into instances of a specific class rather than just Python dictionaries.
Syntax
Following is the syntax of using the object_hook attribute −
json.decoder.JSONDecoder(object_hook=function)
Parameter
It is a user-defined function that transforms parsed JSON objects (dictionaries) into custom Python objects.
Return Value
The object_hook attribute modifies the default dictionary decoding behavior and returns an instance of the specified custom class.
Example: Basic Usage of object_hook
In this example, we use the object_hook attribute to convert a JSON object into a Python class instance −
import json # Define a custom class class Person: def __init__(self, name, age, city): self.name = name self.age = age self.city = city def __repr__(self): return f"Person(name={self.name}, age={self.age}, city={self.city})" # Define a function to convert JSON object to Person instance def person_decoder(obj): return Person(obj['name'], obj['age'], obj['city']) # JSON string json_string = '{"name": "Alice", "age": 30, "city": "New York"}' # Create JSONDecoder instance with object_hook decoder = json.decoder.JSONDecoder(object_hook=person_decoder) # Decode JSON into a custom object parsed_data = decoder.decode(json_string) print("Decoded Custom Object:", parsed_data)
Following is the output obtained −
Decoded Custom Object: Person(name=Alice, age=30, city=New York)
Example: Handling Nested JSON Structures
The object_hook attribute can be extended to handle nested JSON structures −
import json # Define a custom class class Employee: def __init__(self, name, department): self.name = name self.department = department def __repr__(self): return f"Employee(name={self.name}, department={self.department})" # Custom decoder function def employee_decoder(obj): if "name" in obj and "department" in obj: return Employee(obj['name'], obj['department']) return obj # Return unchanged for other objects # JSON string containing nested data json_string = '{"company": "TechCorp", "employee": {"name": "John", "department": "IT"}}' # Create JSONDecoder instance with object_hook decoder = json.decoder.JSONDecoder(object_hook=employee_decoder) # Decode JSON into a custom object parsed_data = decoder.decode(json_string) print("Decoded Nested Object:", parsed_data)
Following is the output of the above code −
Decoded Nested Object: {'company': 'TechCorp', 'employee': Employee(name=John, department=IT)}
Example: Ignoring Certain Keys in JSON
The object_hook attribute can be used to filter out unnecessary keys from JSON −
import json # Custom decoder function to remove unwanted keys def filter_keys(obj): obj.pop("ignore_this", None) # Remove the key if it exists return obj # JSON string with unnecessary data json_string = '{"name": "Alice", "age": 28, "ignore_this": "remove me"}' # Create JSONDecoder instance with object_hook decoder = json.decoder.JSONDecoder(object_hook=filter_keys) # Decode JSON parsed_data = decoder.decode(json_string) print("Filtered JSON:", parsed_data)
We get the output as shown below −
Filtered JSON: {'name': 'Alice', 'age': 28}
Example: Changing Key Names while Decoding
The object_hook attribute can be used to rename keys dynamically −
import json # Custom function to rename JSON keys def rename_keys(obj): new_obj = {} for key, value in obj.items(): new_obj[f"custom_{key}"] = value # Prefix key names with 'custom_' return new_obj # JSON string json_string = '{"name": "Charlie", "age": 35, "city": "Boston"}' # Create JSONDecoder instance with object_hook decoder = json.decoder.JSONDecoder(object_hook=rename_keys) # Decode JSON parsed_data = decoder.decode(json_string) print("Renamed Keys JSON:", parsed_data)
The result produced is as follows −
Renamed Keys JSON: {'custom_name': 'Charlie', 'custom_age': 35, 'custom_city': 'Boston'}