Serializing pydantic enums

Larry Martell larry.martell at gmail.com
Wed May 29 18:29:28 EDT 2024


On Wed, May 29, 2024 at 12:27 PM Larry Martell <larry.martell at gmail.com> wrote:
>
> On Tue, May 28, 2024 at 11:46 AM Left Right via Python-list
> <python-list at python.org> wrote:
> >
> > Most Python objects aren't serializable into JSON. Pydantic isn't
> > special in this sense.
> >
> > What can you do about this? -- Well, if this is a one-of situation,
> > then, maybe just do it by hand?
> >
> > If this is a recurring problem: json.dumps() takes a cls argument that
> > will be used to do the serialization. Extend json.JSONEncoder and
> > implement the encode() method for the encoder class you are passing. I
> > believe that the official docs have some information about this too.
>
> Yeah, I know I can do this, but I seem to recall reading that pydantic
> handled serialization.  Guess not.

Actually it's as simple as adding this to any model that uses an enum model:

class Config:
    use_enum_values = True


> > On Tue, May 28, 2024 at 2:50 PM Larry Martell via Python-list
> > <python-list at python.org> wrote:
> > >
> > > Just getting started with pydantic. I have this example code:
> > >
> > > class FinishReason(Enum):
> > >     stop = 'stop'
> > >
> > > class Choice(BaseModel):
> > >     finish_reason: FinishReason = Field(...)
> > >
> > >
> > > But I cannot serialize this:
> > >
> > > json.dumps(Choice(finish_reason=FinishReason.stop).dict())
> > > *** TypeError: Object of type FinishReason is not JSON serializable
> > >
> > >
> > > I get the object not the value:
> > >
> > > (Pdb) Choice(finish_reason=FinishReason.stop)
> > > Choice(finish_reason=<FinishReason.stop: 'stop'>)
> > >
> > >
> > > Also tried it with .value, same result.
> > >
> > > What am I missing here?


More information about the Python-list mailing list