Convierta datos JSON en un objeto de Python personalizado

Veamos cómo convertir datos JSON en un objeto personalizado en Python. La conversión de datos JSON en un objeto python personalizado también se conoce como decodificación o deserialización de datos JSON. Para decodificar datos JSON podemos hacer uso del método json.loads() , json.load() y el parámetro object_hook . El parámetro object_hook se usa para que, cuando ejecutemos json.loads(), se use el valor de retorno de object_hook en lugar del valor de dictado predeterminado. También podemos implementar decodificadores personalizados usando esto.
Ejemplo 1 : 

Python3

# importing the module
import json
from collections import namedtuple
 
# creating the data
data = '{"name" : "Geek", "id" : 1, "location" : "Mumbai"}'
 
# making the object
x = json.loads(data, object_hook =
               lambda d : namedtuple('X', d.keys())
               (*d.values()))
 
# accessing the JSON data as an object
print(x.name, x.id, x.location)

Producción : 

Como podemos ver en el ejemplo anterior, la tupla nombrada es una clase, bajo el módulo de colecciones. Contiene claves que se asignan a algunos valores. En este caso, podemos acceder a los elementos mediante claves e índices. También podemos crear una función decodificadora personalizada , en la que podemos convertir dict en un tipo de Python personalizado y pasar el valor al parámetro object_hook que se ilustra en el siguiente ejemplo.
Ejemplo 2:  

Python3

# importing the module
import json
from collections import namedtuple
 
# customDecoder function
def customDecoder(geekDict):
    return namedtuple('X', geekDict.keys())(*geekDict.values())
 
# creating the data
geekJsonData = '{"name" : "GeekCustomDecoder", "id" : 2, "location" : "Pune"}'
 
# creating the object
x = json.loads(geekJsonData, object_hook = customDecoder)
 
# accessing the JSON data as an object
print(x.name, x.id, x.location)

Producción : 

También podemos usar la clase SimpleNamespace del módulo de tipos como contenedor para objetos JSON. Ventajas de una solución SimpleNamespace sobre una solución de tupla con nombre: –

  1. Es más rápido porque no crea una clase para cada objeto.
  2. Es más corto y más simple.

Ejemplo 3: 

Python3

# importing the module
import json
try:
    from types import SimpleNamespace as Namespace
except ImportError:
    from argparse import Namespace
 
# creating the data
data = '{"name" : "GeekNamespace", "id" : 3, "location" : "Bangalore"}'
 
# creating the object
x = json.loads(data, object_hook = lambda d : Namespace(**d))
 
# accessing the JSON data as an object
print(x.name, x.id, x.location)

Producción : 

Publicación traducida automáticamente

Artículo escrito por sayaliparulekar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *