Python自定義對象轉json、jso

自定義對象轉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)