Skip to content

yoram487/json-objects

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

json-objects

Python module to read python objects from json test

from jsonobjects import JsonObjectDecoder
import json
    
    
class AClass:
    def __init__(self,*args,**kwargs):
        self.args=args
        self.kwargs=kwargs
        
    def __str__(self):
        return "<AClass %s, %s>"%(
            ",".join(["%s"%a for a in self.args]),
            ",".join(["%s=%s"%a for a in self.kwargs.iteritems()])            
        )

def AMethod(*args,**kwargs):
    return "I was returned by AMethod"





class noFaultJSONEncoder(json.JSONEncoder):
    def default(self, obj):
        return str(obj)
    

if __name__ == '__main__':
    
    JsonObjectDecoder.learnObj(AClass,AMethod)
    
    #You can skip using learnObj by using the decorator make_decodable
    @JsonObjectDecoder.make_decodable
    def AMethod2(*args,**kwargs):
        return "I was returned by AMethod2"
   
    
    test_json_string="""
    {
        "ClassObject_1": AClass(55,msg="We will create a AClass"),
        "MethodResult_1": AMethod(),
        "MethodResult_2": AMethod2(),
        "ANonymous": UnknowClassYet(msg="Hello"),
        "BuiltiN": dict(a="a",b="b"),
        "LikeUsual":{"55":55}
    }
    """
    
    res = json.loads(test_json_string,cls = JsonObjectDecoder)
    
    print json.dumps(res,indent=2,cls=noFaultJSONEncoder)
    #Prints out     
    #{
    #   "LikeUsual": {
    #     "55": 55
    #   },
    #   "MethodResult_q": "I was returned by AMethod",
    #   "ClassObject_1": "<AClass 55, msg=We will create a AClass",
    #   "BuiltiN": {
    #     "a": "a",
    #     "b": "b"
    #   },
    #   "ANonymous": "UnknowClassYet(msg=\"Hello\")"
    # }
    
    import collections
    res["ANonymous"].name = "OrderedDict"
    print res["ANonymous"](collections)
    #Prints
    #OrderedDict([('msg', u'Hello')])
    
    #You can even reuse it
    import sys
    current_module = sys.modules[__name__]
    res["ANonymous"].name = "AClass"
    print res["ANonymous"](current_module)
    
    #Prints
    #<AClass , msg=Hello>
     
    #You can ask it to ignore some builtin functions names .. here dict will be thought of as a Anonymous
    res = json.loads(test_json_string,cls=JsonObjectDecoder,skip_resolve_fnames=["dict"])
    
    print json.dumps(res,indent=2,cls=noFaultJSONEncoder)
    #Prints : 
    #     {
    #   "LikeUsual": {
    #     "55": 55
    #   },
    #   "MethodResult_q": "I was returned by AMethod",
    #   "ClassObject_1": "<AClass 55, msg=We will create a AClass>",
    #   "BuiltiN": "dict(a=\"a\",b=\"b\")",
    #   "ANonymous": "UnknowClassYet(msg=\"Hello\")"
    # }
    
    #Note dict is now an Anonymous so we can do this
    res["BuiltiN"].name = "OrderedDict"
    print res["BuiltiN"](collections)
    
    #Prints
    #OrderedDict([('a', u'a'), ('b', u'b')])
    
    
    
    
    


About

Python module to read python objects from json test

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages