将Python Enum对象序列化为JSON

5

当使用json.dumps(...)将枚举对象序列化为JSON时,Python会抛出以下错误:

>>> class E(enum.Enum):
...     A=0
...     B=1
>>> import json
>>> json.dumps(E.A)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\guptaaman\Miniconda3\lib\json\__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "C:\Users\guptaaman\Miniconda3\lib\json\encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "C:\Users\guptaaman\Miniconda3\lib\json\encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "C:\Users\guptaaman\Miniconda3\lib\json\encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type E is not JSON serializable

如何使枚举对象可JSON序列化?

你期望的结果是什么? - MisterMiyagi
2个回答

9
我们可以让继承 Enum 的类也同时继承 str 类,方法如下:
>>> class E(str, enum.Enum):
...     A="0"
...     B="1"
...
>>> json.dumps(E.A)
'"0"'

参考:https://hultner.se/quickbits/2018-03-12-python-json-serializable-enum.html

本文介绍了如何将Python中的枚举类型转换为可序列化的JSON格式,通过使用自定义编码器和解码器,可以轻松地将枚举类型转换为JSON字符串,并在需要时将其反序列化回原始枚举对象。这种方法可以提高代码的可读性和易用性。

4

使用 enum.IntEnum 代替 enum.Enum,它将自动序列化为整数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接