Method to serialize custom object to JSON in Python

json, python

Solution

If you only need Python -> JSON, it's simple to write a JSONEncoder class that calls such a method for any object:

class AutoJSONEncoder(JSONEncoder):
    def default(self, obj):
        try:
            return obj._json()
        except AttributeError:
            return JSONEncoder.default(self, obj)

You can then use the class directly `AutoJSONEncoder().encode(obj)` or through the `dumps` interface `json.dumps(obj, cls=AutoJSONEncoder)`.

The reverse direction requires at least a list of classes for which to call a `_fromjson` method.

(Note: `__foo__` names are reserved so you shouldn't define them for your own purposes. `__bar` invokes name mangling, which probably isn't what you want.)

Problem

Generally, we can define `__str__` method to make `str(obj)` return what we want. But now I want to define my Model object to return a default JSON string when using `json.dumps(obj)`. Is there any nice way for me to declare a method in the class to do this? ``` class MyClass: ... def __json__(self): return {'name': self.name, 'age': self.age} obj = MyClass() json.dumps(obj) # returns the same as json.dumps(obj.__json__) ```

Original source

Related problems