当前位置:  编程语言>python

Python namedtuple对象json序列化/反序列化及对象恢复

 
    发布时间:2013-9-12  


    本文导语:  元组和列表十分类似,只不过元组和字符串一样是 不可变的 即你不能修改元组。元组通过圆括号中用逗号分割的项目定义。元组通常用在使语句或用户定义的函数能够安全地采用一组值的时候,即被使用的元组的值...

   元组和列表十分类似,只不过元组和字符串一样是 不可变的 即你不能修改元组。元组通过圆括号中用逗号分割项目定义。元组通常用在使语句或用户定义的函数能够安全地采用一组值的时候,即被使用的元组的值不会改变。Python中包括两种元组:普通元组和命名元组,两者的区别是普通元组只能通过下标来访问成员,而命名元组可以通过名字来访问元组成员。

  使用python的命名元组(collections.namedtunple),可以快速将数组转换对象,例如:

>>> import collections
>>> Point = collections.namedtuple('Point', ['x', 'y', 'z'])
>>> p1 = Point(x=3, y=2, z=4)
>>> p1
Point(x=3, y=2, z=4)

但是namedtunple在经过json序列化/反序列化之后,就变成字典了。

>>> import json
>>> s = json.dumps(p1._asdict())
>>> s
'{"x": 3, "y": 2, "z": 4}'
>>> p2 = json.loads(s)
>>> p2
{u'y': 2, u'x': 3, u'z': 4}

 如果使用simplejson,可以直接调用simplejson.dumps(p1),simplejson默认会 将namedtuple作为字典处理(namedtuple_as_object=True)。最终,无论使用 json还是simplejson,都无法改变namedtuple变成字典的命运。要想由字典变 回namedtuple,只要使用字典作为关键词参数(kwargs)重新生成一个对象就可以 了。

>>> p3 = Point(**p2)
>>> p3
Point(x=3, y=2, z=4)


相关文章推荐:


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3