Home >Backend Development >Python Tutorial >How Can I Make My Python Classes JSON Serializable?

How Can I Make My Python Classes JSON Serializable?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-21 14:38:15176browse

How Can I Make My Python Classes JSON Serializable?

Making Python Classes JSON Serializable

Serialization allows objects to be converted into a format suitable for persistence or transfer. Serializing custom classes in JSON often results in a TypeError due to their non-JSON-serializable nature.

Implementing a toJSON() Method

One approach is to create a toJSON() method for the class, which manually handles its serialization. This requires implementing a custom JSON serialization function and ensuring proper handling of nested objects.

import json

class FileItem:
    def __init__(self, fname):
        self.fname = fname

    def toJSON(self):
        return json.dumps(self.__dict__)

x = FileItem('/foo/bar')
print(x.toJSON())  # Outputs: '{"fname": "/foo/bar"}'

Using the orjson Library

For a comprehensive solution, consider using the orjson library, which provides an efficient and customizable way to serialize custom classes to JSON. It offers advanced features like schema enforcement and support for complex object structures.

import orjson

@orjson.dataclass
class FileItem:
    fname: str

x = FileItem('/foo/bar')
json_bytes = orjson.dumps(x)  # Returns a byte string
print(json_bytes.decode())  # Outputs: '{"fname": "/foo/bar"}'

Conclusion

Using a custom toJSON() method or the orjson library provides convenient solutions for serializing Python classes to JSON. Both approaches ensure that objects can be effectively represented and transmitted in a JSON format.

The above is the detailed content of How Can I Make My Python Classes JSON Serializable?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn