What about adding in the json package the ability for an object to provide a different object to serialize ? This would be useful to translate a class into a structure that can be passed to json.dumps
So, it __json__ is provided, its used for serialization instead of the object itself:
import json class MyComplexClass(object):
... def __json__(self): ... return 'json' ...
o = MyComplexClass() json.dumps(o)
Have a look at turbojson , the jsonification package that uses peak.rules  and which comes with turbogears . It does exactly what you propose.
That it uses PEAK-Rules is probably a good reason to avoid it.
Also, AFAIK, TurboGears have stopped using turbojson and relies on [simple]json instead.
That might be true for turbogears2 but turbogears1 (which is still in active development) still uses turbojson. Turbogears 1 and 2 diverged so much that it would be more appropriate to call them different names and consider them different projects (I personally use and prefer tg1).