我想在项目中使用IntEnum,必须将枚举值序列化为json,然后反序列化。
问题是当我使用python 2.7时出现此错误:
ValueError: No JSON object could be decoded
当我使用python 3. *时一切正常。
代码是(对于python 2.7):
import json
from enum import IntEnum
class DigitEnum(IntEnum):
A = 1
if __name__ == '__main__':
print DigitEnum.A
a = json.dumps(DigitEnum.A)
print a # DigitEnum.A
a = json.loads(a) # error here
print a
print a == DigitEnum.A
python 3。*:
import json
from enum import IntEnum
class DigitEnum(IntEnum):
A = 1
if __name__ == '__main__':
print(DigitEnum.A)
a = json.dumps(DigitEnum.A)
print(a) # 1
a = json.loads(a)
print(a)
print(a == DigitEnum.A)
是否有可能避免为我的枚举类创建自定义JSONDecoder \ JSONEncoder或唯一的方法是使用类似这样的内容:
a = json.dumps(DigitEnum.A.value)
主要目标是保存与主要python版本之间的兼容性
答案 0 :(得分:1)
在Python 3.5+中,json
被修改为可以与IntEnum
一起正常使用,例如:
json.dumps(DigitEnum.A) == 1
此更改未反向移植到2.7(并且不会),因此2.7中的相应代码导致:
json.dumps(DigitEnum.A) == 'DigitEnum.A'
是str
,不是DigitEnum
也不是int
。
旁注:在调试时始终使用repr()
,以便您可以看到实际的类型/值是什么。