栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何对集合进行JSON序列化?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何对集合进行JSON序列化?

JSON表示法只有少数本机数据类型(对象,数组,字符串,数字,布尔值和null),因此以JSON序列化的任何内容都必须表示为这些类型之一。

如json模块docs所示,此转换可以由
JSONEnprerJSONDeprer
自动完成,但随后您将放弃可能需要的其他一些结构(如果将集转换为列表,则将失去恢复常规数据的能力。列表;如果使用将集转换为字典,

dict.fromkeys(s)
则将失去恢复字典的能力)。

一个更复杂的解决方案是构建可以与其他本机JSON类型共存的自定义类型。这使您可以存储包括列表,集合,字典,小数,日期时间对象等的嵌套结构:

from json import dumps, loads, JSONEnprer, JSONDeprerimport pickleclass PythonObjectEnprer(JSONEnprer):    def default(self, obj):        if isinstance(obj, (list, dict, str, unipre, int, float, bool, type(None))): return JSONEnprer.default(self, obj)        return {'_python_object': pickle.dumps(obj)}def as_python_object(dct):    if '_python_object' in dct:        return pickle.loads(str(dct['_python_object']))    return dct

这是一个示例会话,显示它可以处理列表,字典和集合:

>>> data = [1,2,3, set(['knights', 'who', 'say', 'ni']), {'key':'value'}, Decimal('3.14')]>>> j = dumps(data, cls=PythonObjectEnprer)>>> loads(j, object_hook=as_python_object)[1, 2, 3, set(['knights', 'say', 'who', 'ni']), {u'key': u'value'}, Decimal('3.14')]

另外,使用更通用的序列化技术(例如YAML,Twisted
Jelly或Python的pickle模块)可能很有用。它们每个都支持更大范围的数据类型。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/418336.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号