tengo los siguientes métodos simples para escribir un objeto de Python en un archivo utilizando jsonpickle:guardar y cargar objetos de archivo utilizando jsonpickle
def json_serialize(obj, filename, use_jsonpickle=True):
f = open(filename, 'w')
if use_jsonpickle:
import jsonpickle
json_obj = jsonpickle.encode(obj)
f.write(json_obj)
else:
simplejson.dump(obj, f)
f.close()
def json_load_file(filename, use_jsonpickle=True):
f = open(filename)
if use_jsonpickle:
import jsonpickle
json_str = f.read()
obj = jsonpickle.decode(json_str)
else:
obj = simplejson.load(f)
return obj
el problema es que cada vez que use estos, se carga los objetos de mi espalda mientras diccionarios (que tienen campos como: "py/object": "my_module.MyClassName") pero no como un objeto de Python real del tipo que se utilizó para generar la cadena json. ¿Cómo puedo hacer que jsonpickle realmente convierta la cadena cargada al objeto?
Para ilustrar esto con un ejemplo, considere la siguiente:
class Foo:
def __init__(self, hello):
self.hello = hello
# make a Foo obj
obj = Foo("hello world")
obj_str = jsonpickle.encode(obj)
restored_obj = jsonpickle.decode(obj_str)
list_objects = [restored_obj]
# We now get a list with a dictionary, rather than
# a list containing a Foo object
print "list_objects: ", list_objects
Este rendimientos:
list_objects: [{'py/object': 'as_events.Foo', 'hello': 'hello world'}]
En lugar de algo como: [Foo()]. ¿Cómo puedo arreglar esto?
gracias.
¿Se puede 'importar como_eventos' antes de' jsonpickle.decode() 'línea? – jfs
FWIW Este es un gran ejemplo de cuándo debe usar el administrador de contexto 'with open()' para la escritura de archivos. Cuando encuentre serialización de errores aquí, dejará sus archivos abiertos, eso es malo. – BoltzmannBrain