Python自定义对象转json、jso

发布时间:2019-09-18 07:38:40编辑:auto阅读(2241)

    自定义对象转Json:自己探索出来的,直接看下面简单的例子吧。

    #自定义对象转换成json
    
    import json
    
    #自定义对象
    class C:
        key1=list
        key2=str
        key3=int
        key4=tuple 
        def __init__(self,key1,key2,key3,key4):
            self.key1=key1
            self.key2=key2
            self.key3=key3
            self.key4=key4
            
    #实例化自定义类
    c=C([1,2,3],'str',0,('yuanzu','元组'))
    
    #json.dumps方法不能对自定义对象直接序列化,首先把自定义对象转换成字典
    
    overdict = c.__dict__
    
    # 此时就可以用json.dumps序列化了
    result=json.dumps(overdict, ensure_ascii=False)
    print(result)
    print(type(result))

    二、Json 转自定义对象:暂时查不到 Json 转 Python 对象的傻瓜办法,这里贴一个网友的来自:

    https://blog.csdn.net/TaiJi1985/article/details/51344879

    发现更简单的办法继续分享。

    # 定制类
    import time
    
    class D(object):
    
        def __init__(self,map):
            self.map = map
    
        def __setattr__(self, name, value):
            if name == 'map':
                 object.__setattr__(self, name, value)
                 return True
            print ('set attr called ',name,value)
            self.map[name] = value
    
        def __getattr__(self,name):
            v = self.map[name]
            if isinstance(v,(dict)):
                return (DictObj(v))
            if isinstance(v, (list)):
                r = []
                for i in v:
                    r.append(DictObj(i))
                return (r)
            else:
                return (self.map[name])
            
        def __getitem__(self,name):
            return (self.map[name])
    
    if __name__ == '__main__':
    
          # json转换成字典
          import json
          #实际上JSON就是Python中的字符串,所以在这里首先定义一个字符串充当从网络请求中得到的json
          json_obj='{"key1":[1,2,3],"key2":"str2"}' 
          # 注意json键值对的边界符只能用双引号
          t=json.loads(json_obj)
    
          # 字典转换成自定义对象
          model = D(t)
          print (model.key2)

    三、更新Json转自定义字符串:

    import json
    
    class Ook():
        name=str
        def __init__(self, d):
            self.__dict__ = d
    
    if __name__ == '__main__':
        
        data = {'name' : 'ACME','shares' : 100,'price' : {'name' : 'ACME'}}
        json_str = json.dumps(data) 
        result = json.loads(json_str, object_hook=Ook)
        print(result.name)
        print(result.shares)
        print(result.price.name)


关键字