Serializar un objeto de clase de Python a JSON

Zeeshan Afridi 21 junio 2023
  1. Serialización en Python
  2. Hacer una clase de Python JSON serializable
Serializar un objeto de clase de Python a JSON

Este tutorial educa sobre el proceso de serialización. También ilustra cómo podemos hacer que una clase JSON sea serializable usando el método toJSON() y envolviendo JSON para volcar en su clase.

Serialización en Python

El proceso de serialización implica transformar un objeto en un formato que pueda conservarse y recuperarse más tarde. Por ejemplo, registrando el estado de un objeto en un archivo.

Todos los desarrolladores deben realizar la serialización en algún momento para todos los proyectos que sean remotamente sofisticados. La simplicidad del lenguaje de programación Python en muchos trabajos típicos de programación es una de sus excelentes características.

Con unas pocas líneas de código, el archivo IO, dibujar gráficos y acceder al contenido en línea se simplifican. Del mismo modo, Python simplifica la serialización, excepto cuando intenta serializar una clase personalizada.

Aprendamos cómo serializar sus objetos de clase a objetos JSON a continuación.

Hacer una clase de Python JSON serializable

El módulo json incorporado de Python solo puede manejar tipos primitivos de Python con una contraparte directa de JSON.

Expresamente, la funcionalidad predeterminada del codificador JSON, json.dump() y json.dumps() se limita a serializar el conjunto más básico de tipos de objetos (por ejemplo, diccionario, listas, cadenas, números, Ninguno, etc. .).

Para solucionar esto, debemos crear un codificador único que permita que nuestra clase JSON sea serializable.

Es posible hacer que una clase de Python JSON sea serializable en varios métodos. Elija la opción que mejor se adapte a la complejidad de su situación.

Hay dos métodos principales para hacer que una clase JSON sea serializable que se detallan a continuación:

  1. El método toJSON()
  2. Envuelva JSON para volcar en su clase

Utilice el método toJSON() para hacer serializable una clase JSON

Podemos implementar el método serializador en lugar de la clase serializable JSON. Por ejemplo, en este método, la clase Objeto puede tener una función JSON que devuelve un diccionario de la información del Objeto.

Dado que todos los atributos de Objeto son tipos nativos, podemos enviar este diccionario a una función de codificación para obtener la notación JSON. Finalmente, devolvemos los valores de los atributos que componen un objeto.

import json


class Object:
    def toJSON(self):
        return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True, indent=4)


me = Object()
me.name = "kelvin"
me.age = 20
me.dog = Object()
me.dog.name = "Brunno"
print(me.toJSON())

Producción :

{
    "age": 20,
    "dog": {
        "name": "Brunno"
    },
    "name": "kelvin"
}

Envuelva JSON para volcar en su clase

Otra solución es crear una subclase de una clase JsonSerializable para crear una clase FileItem que envuelva el volcado de JSON, como se muestra en el siguiente código.

Código de ejemplo:

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)

Producción :

{"id": 1, "name": "Kelvin"}
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

Artículo relacionado - Python JSON

Artículo relacionado - Python Class