When searching around the web on how to serialize a python class to json I found no easy and clean solution. So here is my best and cleanest solution for python3.
#!/usr/bin/env python3
import json
from dataclasses import dataclass
@dataclass
class Person:
first: str
last: str
age: int
@property
def __json__(self):
return {
"name": f"{self.first} {self.last}",
"age": self.age
}
john = Person("John", "Doe", 42)
print(json.dumps(john, indent=4, default=lambda x: x.__json__))
Code language: Python (python)
This way you could also serialize nested classes, as __json__
returns a python object and not a string. No need to use a JSONEncoder
, as the default
parameter with a simple lambda also works fine.
I’ve used @property
instead of a simple function, as this feels more natural and modern. The @dataclass
is also just an example, it works for a “normal” class as well.
I’ve also posted this solution on stackoverflow, and I really do not understand why nobody found this simple and clean solution earlier. But I guess most people would not scroll down to my answer. Upvote it, if you like.