【问题标题】:JSON serialize Python Enum object [duplicate]JSON序列化Python枚举对象[重复]
【发布时间】:2022-01-17 09:02:09
【问题描述】:

使用 json.dumps(...) 将 Enum 对象序列化为 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

如何使 Enum 对象 JSON 可序列化?

【问题讨论】:

  • 你期望结果是什么?

标签: python json


【解决方案1】:

我们可以让继承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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-12-18
      • 2012-05-26
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      • 2019-06-20
      相关资源
      最近更新 更多