A trivial way to make a Python Enum which is based on string tokens JSON-serializable is to inherit both str and Enum. Look at the example below for some pointers.
I’ve prepared a quick demo below. Once I figured it out I laughed at myself for not seeing it earlier.
pet.py[code]
from enum import Enum
class PetType(str, Enum):
CAT: str = "cat"
DOG: str = "dog"
Let’s test it out in our interpreter
>>> import json
>>> import pet
>>> json.dumps([pet.PetType.CAT, pet.PetType.DOG])
'["cat", "dog"]'
It’s really that easy!
No need for a custom JSONEncoder, str is already serializable.
The built in IntEnum
works the same way, in fact that’s how I figured it out.
This applies for other classes as well. E.g. let a class inherit dict to gain it’s properties; including JSON serialization with the default encoder.