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

将Enum成员序列化为JSON

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

将Enum成员序列化为JSON

如果您想将任意

enum.Enum
成员编码为JSON,然后将其解码为相同的枚举成员(而不是简单的枚举成员的
value
属性),则可以编写一个自定义
JSONEnprer
类,并使用一个解码函数作为
object_hook
参数传递给
json.load()
or来实现。
json.loads()

PUBLIC_ENUMS = {    'Status': Status,    # ...}class EnumEnprer(json.JSONEnprer):    def default(self, obj):        if type(obj) in PUBLIC_ENUMS.values(): return {"__enum__": str(obj)}        return json.JSONEnprer.default(self, obj)def as_enum(d):    if "__enum__" in d:        name, member = d["__enum__"].split(".")        return getattr(PUBLIC_ENUMS[name], member)    else:        return d

as_enum
函数依赖于已使用
EnumEnprer
或类似行为进行编码的JSON 。

对成员的限制

PUBLIC_ENUMS
是必要的,以避免使用恶意制作的文本来(例如)欺骗调用代码以将私有信息(例如,应用程序使用的密钥)保存到不相关的数据库字段中,然后从该字段中将其公开(请参阅http://chat.stackoverflow.com/transcript/message/35999686#35999686)。

用法示例:

>>> data = {...     "action": "frobnicate",...     "status": Status.success... }>>> text = json.dumps(data, cls=EnumEnprer)>>> text'{"status": {"__enum__": "Status.success"}, "action": "frobnicate"}'>>> json.loads(text, object_hook=as_enum){'status': <Status.success: 0>, 'action': 'frobnicate'}


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

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

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