Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一个python json库可以将json转换为模型对象,类似于google gson?_Python_Json - Fatal编程技术网

是否有一个python json库可以将json转换为模型对象,类似于google gson?

是否有一个python json库可以将json转换为模型对象,类似于google gson?,python,json,Python,Json,标准python json模块只能将json字符串转换为dict结构 但我更喜欢将json转换为具有“父子”关系的模型对象结构 我在Android应用程序中使用google gson,但不知道哪个python库可以做到这一点。您可以编写自己的序列化程序,使其与json一起工作,但为什么不使用支持它的现成的: >>> import yaml >>> class Foo: ... def bar(self): ... print 'Hello I

标准python json模块只能将json字符串转换为dict结构

但我更喜欢将json转换为具有“父子”关系的模型对象结构


我在Android应用程序中使用google gson,但不知道哪个python库可以做到这一点。

您可以编写自己的序列化程序,使其与json一起工作,但为什么不使用支持它的现成的:

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

您可以让json模块构造一个dict,然后使用to,如下所示:

>>> 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'
>>>
导入json >>> >>>类人(对象): ... firstName=“” ... lastName=“” ... >>> >>>def as_人员(d): ... p=人() ... p、 目录更新(d) ... 返回p ... >>> >>>s='{“firstName”:“John”,“lastName”:“Smith”}' >>>加载(s,object\u hook=as\u person) >>> >>>类型(o) >>> >>>o.名字 “约翰” >>> >>>o.姓氏 u'Smith' >>>
在2018年,可以使用,使用静态键入,谢谢你的建议,但出于向后兼容性的原因,我需要使用JSON。Tt与object_hook一起工作。谢谢@Bogdan。model中的model如何?如果对象有datetime,它将不起作用。