it-swarm.it

Converti dinamico python in json

Possibile duplicato:
json oggetti serializzabili Python

Devo sapere come convertire un oggetto dinamico python in JSON. L'oggetto deve essere in grado di avere oggetti figlio oggetto a più livelli. Ad esempio:

class C(): pass
class D(): pass

c = C()
c.dynProperty1 = "something"
c.dynProperty2 = { 1, 3, 5, 7, 9 }
c.d = D()
c.d.dynProperty3 = "d.something"

# ... convert c to json ...

Usando python 2.6 il seguente codice:

import json

class C(): pass
class D(): pass

c = C()
c.what = "now?"
c.now = "what?"
c.d = D()
c.d.what = "d.what"

json.dumps(c.__dict__)

genera il seguente errore:

TypeError: <__main__.D instance at 0x99237ec> is not JSON serializable

Non so quali tipi di oggetti secondari un utente potrebbe inserire in c. Esiste una soluzione abbastanza intelligente da rilevare se un attributo è un oggetto e analizzarlo è __dict__ automaticamente?

AGGIORNATO per includere oggetti secondari in c.

61
Trevor

Specificare la default= parametro ( doc ):

json.dumps(c, default=lambda o: o.__dict__)
118
phihag
json.dumps(c.__dict__)

Questo ti darà un oggetto JSON generico, se è quello che stai cercando.

17
Austin Marshall

Prova a usare questo pacchetto python-jsonpickle

Libreria Python per serializzare qualsiasi grafico a oggetti arbitrario in JSON. Può richiedere quasi ogni Python e trasformare l'oggetto in JSON. Inoltre, può ricostituire l'oggetto in Python.

8
funkotron

json.dumps Prevede un dizionario come parametro. Per un'istanza c, l'attributo c.__dict__ È un dizionario che associa i nomi degli attributi agli oggetti corrispondenti.

0
rocksportrocker