Skip to content

Instantly share code, notes, and snippets.

@devries
Last active August 29, 2015 14:25
Show Gist options
  • Save devries/befc11d2fc38099ea98a to your computer and use it in GitHub Desktop.
Save devries/befc11d2fc38099ea98a to your computer and use it in GitHub Desktop.
A JSON library with an object encoder for python
#!/usr/bin/env python
import json
from datetime import datetime
class ObjectEncoder(json.JSONEncoder):
def default(self,obj):
try:
return json.JSONEncoder.default(self,obj)
except TypeError:
pass
try:
return obj.jsonable()
except AttributeError:
pass
try:
# Maybe it's a datetime object
return obj.isoformat()
except AttributeError:
pass
try:
return obj.__dict__
except AttributeError:
pass
try:
return list(obj)
except TypeError:
raise TypeError(repr(obj)+" is not JSON serializable")
def dump(*args,**kwargs):
kwargs['cls']=ObjectEncoder
return json.dump(*args,**kwargs)
def dumps(*args,**kwargs):
kwargs['cls']=ObjectEncoder
return json.dumps(*args,**kwargs)
def load(*args,**kwargs):
return json.load(*args,**kwargs)
def loads(*args,**kwargs):
return json.loads(*args,**kwargs)
if __name__=='__main__':
class TestClass(object):
def jsonable(self):
retdict = {'classname':self.__class__.__name__,
'what':'To run a test'
}
return retdict
a = TestClass()
b = TestClass()
c = set([1,2,3])
v = [a,b,{'name':'chris','date':datetime.utcnow()},2.0,c]
print dumps(v,indent=2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment