2012-07-21 17 views

Respuesta

4

Usted puede dejar que el módulo json construir un diccionario y luego usar una object_hook a transform the dict into an object, algo como esto:

>>> import json 
>>> 
>>> class Person(object): 
...  firstName = "" 
...  lastName = "" 
... 
>>> 
>>> def as_person(d): 
...  p = Person() 
...  p.__dict__.update(d) 
...  return p 
... 
>>> 
>>> s = '{ "firstName" : "John", "lastName" : "Smith" }' 
>>> o = json.loads(s, object_hook=as_person) 
>>> 
>>> type(o) 
<class '__main__.Person'> 
>>> 
>>> o.firstName 
u'John' 
>>> 
>>> o.lastName 
u'Smith' 
>>> 
+0

Tt funciona con object_hook. Gracias @Bogdan. –

+0

¿qué hay de modelo en modelo –

1

Se puede escribir su propio serializador para que funcione con JSON, pero ¿por qué no usar pyyaml que la sostiene fuera de la caja:

>>> import yaml 
>>> class Foo: 
... def bar(self): 
...  print 'Hello I am bar' 
... def zoo(self,i): 
...  self.i = i 
...  print "Eye is ",i 
... 
>>> f = Foo() 
>>> f.zoo(2) 
Eye is 2 
>>> s = yaml.dump(f) 
>>> f2 = yaml.load(s) 
>>> f2.zoo(3) 
Eye is 3 
>>> s 
'!!python/object:__main__.Foo {i: 2}\n' 
>>> f2 = yaml.load(s) 
>>> f2.i 
2 
+0

Gracias por su sugerencia, pero por la razón de la compatibilidad con versiones anteriores necesito usar JSON. –

+0

http://yamltojson.com/ – dg123