Ignorare la classe JSONEncoder e chiamare o.result()
su istanze Future è unidirezionale.
class CustomJSONEncoder(json.JSONEncoder):
def default(self, o, *args, **kwargs):
if isinstance(o, concurrent.futures.Future):
return o.result()
return super(CustomJSONEncoder, self).default(o, *args, **kwargs)
json.dumps(data, cls=CustomJSONEncoder)
per farlo funzionare senza un personalizzato JSONEncoder, si potrebbe scorrere la struttura dei dati stessi, chiamando o.result()
:
data = [o.result() if isinstance(o, concurrent.futures.Future) else o for o in data]
o modificare data
sul posto:
for i, o in enumerate(data):
if isinstance(o, concurrent.futures.Future):
data[i] = o.result()
fonte
2016-02-07 05:21:08
Ho un hack che sovrascrive la classe 'jsonEncoder', ma forse esiste una soluzione migliore? –