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

如何对集合进行JSON序列化?,第1张

如何对集合进行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模块)可能很有用。它们每个都支持更大范围的数据类型。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5051256.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存