# objects_to_json: 将 model对象 转化成 json
# json_to_objects: 将 将反序列化的json 转为 model 对象

def json_field(field_data):

"""
将字典的键值转化为对象
:param field_data:
:return:
"""
if isinstance(field_data, str):
return "\"" + field_data + "\""
elif isinstance(field_data, bool):
if field_data == 'False':
return 'false'
else:
return 'true'
elif isinstance(field_data, unicode):
return "\"" + field_data.encode('utf-8') + "\""
elif field_data is None:
return "\"\""
else:
return "\"" + str(field_data) + "\""

def json_encode_dict(dict_data):
"""
将字典转化为json序列
:param dict_data:
:return:
"""
json_data = "{"
for (k, v) in dict_data.items():
json_data = json_data + json_field(k) + ':' + json_field(v) + ', '
json_data = json_data[:-2] + "}"
return json_data

def json_encode_list(list_data):

"""
将列表中的字典元素转化为对象
:param list_data:
:return:
"""
json_res = "["
for item in list_data:
json_res = json_res + json_encode_dict(item) + ", "
return json_res[:-2] + "]"

def objects_to_json(objects, model):

"""
将 model对象 转化成 json
example:
1. objects_to_json(Test.objects.get(test_id=1), EviewsUser)
2. objects_to_json(Test.objects.all(), EviewsUser)
:param objects: 已经调用all 或者 get 方法的对象
:param model: objects的 数据库模型类
:return:
"""
from collections import Iterable
concrete_model = model._meta.concrete_model
list_data = []

# 处理不可迭代的 get 方法
if not isinstance(object, Iterable):
objects = [objects, ]

for obj in objects:
dict_data = {}
print concrete_model._meta.local_fields
for field in concrete_model._meta.local_fields:
if field.name == 'user_id':
continue
value = field.value_from_object(obj)
dict_data[field.name] = value
list_data.append(dict_data)

data = json_encode_list(list_data)
return data

def json_to_objects(json_str, model):

"""
将 将反序列化的json 转为 model 对象
example:
Test model 预先定义
test_str = '[{"test_id":"0", "test_text":"hello json_to_objects"}]'
json_to_objects(json_str, model)
:param json_str:
:param model: objects的 数据库模型类
:return:
"""
import ast
json_list = ast.literal_eval(json_str)
obj_list = []
field_key_list = [field.name for field in model._meta.concrete_model._meta.local_fields]
for item in json_list:
obj = model()
for field in item:
if field not in field_key_list:
raise ValueError('数据库无 ' + field + ' 字段')
setattr(obj, field, item[field])
obj_list.append(obj)
return obj_list

最新文章

  1. Hibernate框架中Criteria语句
  2. js实现开灯关灯效果
  3. mysql时间日期相加相减实现
  4. CSAPP(1):数字的计算机表示——课后题
  5. Java学习步骤
  6. lib_mysqludf_sys的安装过程
  7. MVC接收以post形式传输的各种参数
  8. AJAX防重复提交的办法总结
  9. 调试出不来 断点不起作用 调试技巧 MyEclipse进不了调试
  10. mysql获取当前时间,前一天,后一天
  11. POJO、JavaBean、DTO的区别
  12. Nload(CentOS网速的实时监控)
  13. 从零开始unity特效(持续追加中)
  14. MPI 在Windows10 上安装,使用VS2013编译生成可执行程序
  15. HTML 标记 3 —— CSS
  16. 为tomcat配置项目必须的引擎文件
  17. 项目复审——Beta阶段
  18. Redis Scan命令
  19. Eigen教程(3)
  20. MD2关键桢动画3D模型加载.

热门文章

  1. Java Annotation使用详解
  2. linux打开进程数测试
  3. LeetCode Remove Duplicates from Sorted Array删除整型数组中的重复元素并返回剩下元素个数
  4. 2018.10.03 NOIP+ 模拟赛 解题报告
  5. R+hadoop
  6. 《javascript 学习笔记》
  7. fstatfs/statfs详解
  8. ajax 的 promise
  9. 正则表达式通用匹配ip地址及主机检测
  10. GNU汇编 程序状态字访问指令