2012-07-21 69 views

回答

4

您可以让json模块构建一个字典,然后使用object_hooktransform the dict into an object,这样的事情:

>>> 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适用于object_hook。谢谢@Bogdan。 – 2012-07-30 07:41:17

+0

模型如何? – 2017-03-18 10:44:29

1

你可以写你自己的序列,使其与JSON工作,但为什么不使用pyyaml支持开箱的:

>>> 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

感谢您的建议,但为了向后兼容的原因,我需要使用JSON。 – 2012-07-21 12:52:09

+0

http://yamltojson.com/ – dg123 2013-09-30 10:13:20

相关问题