2014-04-15 17 views
6

Ho una classe personalizzata, chiamiamo classe ObjectA(), e ha un sacco di funzioni, proprietà, ecc., E voglio serializzare l'oggetto usando la libreria json standard in python , cosa devo implementare affinché questo oggetto venga serializzato su JSON senza scrivere un encoder personalizzato?Crea una classe personalizzata JSON serializzabile

Grazie

+0

Probabilmente una vittima di questa domanda: http://stackoverflow.com/questions/3768895/python-how-to-make -a-class-json-serializable – dano

risposta

6

sottoclasse json.JSONEncoder, e poi costruire un dizionario o un array adatto.

Vedere "Estensione JSONEncoder" dietro this link

Ti piace questa:

>>> class A: pass 
... 
>>> a = A() 
>>> a.foo = "bar" 
>>> import json 
>>> 
>>> class MyEncoder(json.JSONEncoder): 
... def default(self, obj): 
...  if isinstance(obj, A): 
...   return { "foo" : obj.foo } 
...  return json.JSONEncoder.default(self, obj) 
... 
>>> json.dumps(a, cls=MyEncoder) 
'{"foo": "bar"}' 
+4

'senza scrivere un codificatore personalizzato' – Ford

+2

Non possibile senza un encoder personalizzato. Se la premessa della domanda è che JSON non sa già come codificarlo, allora qualsiasi soluzione coinvolgerà un codificatore personalizzato. Forse non uno che estende JSONEncoder - potresti scrivere una semplice f() che mappa un oggetto su un dict - ma quale sarebbe, se non un codificatore personalizzato? – FrobberOfBits

+0

Dovresti menzionarlo nella tua risposta in modo che OP sappia che non è possibile e quali sono le altre opzioni (se ce ne sono). Scusa se sono uscito un po 'scortese. – Ford

Problemi correlati