Python 2.7 IntEnum:无法解码JSON对象

时间:2018-07-30 10:40:59

标签: json python-3.x python-2.7 enums

我想在项目中使用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版本之间的兼容性

1 个答案:

答案 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(),以便您可以看到实际的类型/值是什么