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: –
- Es más rápido porque no crea una clase para cada objeto.
- 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