Files
python3-cookbook/basic/samples/jsonutil.py

47 lines
1.2 KiB
Python
Raw Normal View History

2015-01-16 18:01:26 +08:00
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
Topic: json序列化对象
Desc :
"""
import json
def get_instance(cls_str, model_str='model.beans'):
mod = __import__(model_str, fromlist=1)
return getattr(mod, cls_str)()
def dict2obj(d, cls_str, model_str='model.beans'):
# if not isinstance(d,dict):return d
obj = get_instance(cls_str, model_str)
for k, v in d.items():
if hasattr(obj, k): setattr(obj, k, v)
return obj
def json2obj(json_str):
def hook(dic):
flag = False
if type(dic) not in [list, tuple, dict]: return dic
if isinstance(dic, dict) and 'cls_name' in dic:
flag = True
for k, v in dic.items():
dic[k] = hook(v)
if flag:
pth = dic['cls_name'].split('.')
cls_str = pth[-1]
model_str = '.'.join(pth[:-1])
return dict2obj(dic, cls_str, model_str)
elif isinstance(dic, dict): # dict
for k, v in dic.items():
dic[k] = hook(v)
return dic
else: # list
for i, elm in enumerate(dic):
dic[i] = hook(elm)
return dic
return json.loads(json_str, object_hook=hook)