Convert Dataclass to JSON in Python

Convert Dataclass to JSON in Python

In this tutorial, we’ll learn how JSON is supported in Python to create dataclass for each JSON root node. We will also learn the implementation of dataclass as a dictionary in Python.

dataclass to JSON in Python

JavaScript Object Notation or JSON indicates that the data is stored and transferred using a script (executable) file composed of text in a programming language.

Python supports JSON through the JSON built-in module. Therefore, we import the JSON package into the Python script to leverage this capability.

The quoted string used in JSON contains the value in the key-value mapping. It is comparable to Python’s dictionary.

Python supports JSON features natively, and JSON displays an API akin to users of the marshal and pickle modules from the Standard Library.

On the other hand, the dataclass creates data transfer objects which are used for storing data in them; these objects need proper defining methods for equal comparison, sometimes for display.

dataclass is used for creating methods and short syntax for data transfer classes.

Implement dataclass as a Dictionary in Python

Python 3.7 and later are the only versions that support the dataclass decorator. It produces an object, commonly referred to as a data transfer object, whose sole function is to store data.

The issue is that providing these objects with the correct functionality necessitates creating methods for equality comparison, display, etc.

These methods must be labor-intensive to develop and prone to errors. A dataclass produces all these methods for you, giving data transfer classes a short syntax.

It uses a slightly altered (and somewhat more effective) version of dataclasses.asdict for serialization.

You are iterating over the dataclass fields and creating a parser for each annotated type when de-serializing JSON to a dataclass instance for the first time makes the process more effective when repeated.

Create a dataclass for Every JSON root Node in Python

Since the "users" field is an array of objects with "id" and "name", we can see that we need to construct two classes: "Test" and "User".

Example Code:

from dataclasses import dataclass
from typing import List

@dataclass
class User:
    id: 1
    name: "Kelvin"

@dataclass
class Test:
    id: 2
    userid:" Jack"
users: List[User]

Each JSON attribute should be mapped to a type-safe Python property.

The following code maps each JSON node & attributes to the Python classes & properties. To do that, we create a static method in Python classes responsible for mapping our dictionary to your Python properties.

Example Code:

from typing import List
from dataclasses import dataclass, asdict, field
from json import dumps

@dataclass
class Students:
    id: 1
    name: "stu1"

    @property
    def __dict__(self):
        return asdict(self)

    @property
    def json(self):
        return dumps(self.__dict__)

test_object_1 = Students(id=1, name="Kelvin")
print(test_object_1.json)

Output:

{"id": 1, "name": "Kelvin"}

Remember that the data transfer objects are made by dataclasses and are used to store data in them. Therefore, these objects require the correct methods’ definition for equal comparison and occasionally for displays.

Method and syntax for data transfer classes are created using dataclass.

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

Related Article - Python Dataclass

  • Python Dict vs Asdict