Last active
August 29, 2015 14:25
-
-
Save devries/befc11d2fc38099ea98a to your computer and use it in GitHub Desktop.
A JSON library with an object encoder for python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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