ho i seguenti metodi semplici per la scrittura di un oggetto Python in un file utilizzando jsonpickle:salvare e caricare gli oggetti da file utilizzando 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
il problema è che ogni volta che uso questi, carica miei oggetti indietro come dizionari (che hanno campi come: "py/object": "my_module.MyClassName") ma non come un vero oggetto Python del tipo che è stato usato per generare la stringa json. Come posso fare in modo che jsonpickle converta effettivamente la stringa caricata sull'oggetto?
illustrare con un esempio, considerare quanto segue:
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
Questo produce:
list_objects: [{'py/object': 'as_events.Foo', 'hello': 'hello world'}]
Piuttosto che qualcosa di simile a: [Foo()]. Come posso risolvere questo?
grazie.
Puoi importare as_events' prima della riga 'jsonpickle.decode()'? – jfs
FWIW questo è un ottimo esempio di quando si dovrebbe usare il 'con open()' gestore di contesto per la scrittura di file. Quando ti imbatti in errori di serializzazione qui lascerai i tuoi file aperti - questo è male. – BoltzmannBrain