Necesito saber cómo convertir un objeto de python dynamic en JSON. El objeto debe poder tener objetos secundarios de objeto de niveles múltiples. Por ejemplo:
class C(): pass class D(): pass c = C() c.dynProperty1 = "something" c.dynProperty2 = { 1, 3, 5, 7, 9 } cd = D() cddynProperty3 = "d.something" # ... convert c to json ...
Usando Python 2.6 el siguiente código:
import json class C(): pass class D(): pass c = C() c.what = "now?" c.now = "what?" cd = D() cdwhat = "d.what" json.dumps(c.__dict__)
produce el siguiente error:
TypeError: is not JSON serializable
No sé qué tipos de subobjetos podría poner un usuario en c
. ¿Existe una solución que sea lo suficientemente inteligente como para detectar si un atributo es un objeto y analizarlo es __dict__
automáticamente?
ACTUALIZADO para incluir subobjetos en c
.
Especifique el parámetro por default=
( doc ) :
json.dumps(c, default=lambda o: o.__dict__)
json.dumps(c.__dict__)
Eso te dará un objeto JSON genérico, si eso es lo que buscas.
Trate de usar este paquete python-jsonpickle
Biblioteca de Python para serializar cualquier gráfico de objeto arbitrario en JSON. Puede tomar casi cualquier objeto de Python y convertir el objeto en JSON. Además, puede reconstituir el objeto de nuevo en Python.
json.dumps
espera un diccionario como parámetro. Para una instancia c
, el atributo c.__dict__
es un diccionario que asigna nombres de atributos a los objetos correspondientes.