【发布时间】:2021-10-20 11:35:57
【问题描述】:
如果我写
import json
class Color():
FUSCHIA = 0x00
TURQUOISE = 0x01
EMERALD = 0x02
def my_default_serializer(o):
return o.__dict__
def get_colors():
return json.dumps(
{
'dark_bg': True,
'colors_batch': [Color.TURQUOISE,
Color.EMERALD]
},
default=my_default_serializer
)
print(get_colors())
然后我得到了,正如预期的那样:
{"dark_bg": true, "colors_batch": [1, 2]}
现在假设我通过引入enum.Enum 对这段代码进行了现代化改造。除此之外,这很方便,因为Enum 将解析一个字符串(例如从文件中读取),因此我将上面的代码替换为:
import json
from enum import Enum
class Color(Enum):
FUSCHIA = 0x00
TURQUOISE = 0x01
EMERALD = 0x02
def my_default_serializer(o):
return o.__dict__
def get_colors():
return json.dumps(
{
'dark_bg': True,
'colors_batch': [Color['TURQUOISE'],
Color['EMERALD']]
},
default=my_default_serializer
)
print(get_colors())
这引入了错误:
AttributeError: 'mappingproxy' object has no attribute '__dict__'
(如果我不指定默认序列化程序,我会得到TypeError: Object of type 'Color' is not JSON serializable )。
我应该如何对 Enum-children 进行 JSON 序列化?
【问题讨论】:
-
你能分享
big_obj的定义吗?为什么使用my_default_serializer? -
@balderman 感谢您的提问。我现在用一个自包含示例来说明问题的相同问题替换了这个问题。
-
我设法序列化了
Color。见下文
标签: python json python-3.x enums