#coding:utf-8
from json import dumps, loads, JSONEncoder, JSONDecoder
import pickle
from app.model.Jsonable import Jsonable
from sqlalchemy.ext.declarative import DeclarativeMeta
import jira
from jira.resources import User
import datetime
import json #python对象编码为json对象统一方法,用法为 json.dumps(project, cls=PythonObjectEncoder)
class PythonObjectEncoder(JSONEncoder):
def default(self, obj):
if isinstance(obj, (list, dict, str, int, float, bool, type(None), Jsonable, jira.resources.Resource)):
fields = {}
for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata']:
data = obj.__getattribute__(field)
try:
# this will fail on non-encodable values, like other classes
dumps(data)
fields[field] = data
except TypeError:
fields[field] = None
# a json-encodable dict
return fields
return JSONEncoder.default(self, obj) class AlchemyEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj.__class__, DeclarativeMeta):
# an SQLAlchemy class
fields = {}
# for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata' and not hasattr(obj.__class__.__bases__,x)]:
for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata' and x != 'query' and x != 'query_class']:
data = obj.__getattribute__(field)
try:
# this will fail on non-encodable values, like other classes
json.dumps(data)
fields[field] = data
except TypeError: # 添加了对datetime的处理
if isinstance(data, datetime.datetime):
#fields[field] = data.isoformat()
fields[field] = data.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(data, datetime.date):
#fields[field] = data.isoformat()
fields[field] = data.strftime('%Y-%m-%d')
elif isinstance(data, datetime.timedelta):
fields[field] = (
datetime.datetime.min + data).time().isoformat()
# elif isinstance(data.__class__, DeclarativeMeta):
# json.dumps(data,cls=AlchemyEncoder)
# pass
else:
fields[field] = None
# a json-encodable dict
return fields return json.JSONEncoder.default(self, obj) class DateTimeEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime.datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(obj, datetime.date):
return obj.strftime('%Y-%m-%d')
elif isinstance(obj.__class__, DeclarativeMeta):
return dumps(obj,cls=AlchemyEncoder)
else:
return json.JSONEncoder.default(self, obj) class ModelToJsonObject(object):
def to_json(self,obj):
if isinstance(obj.__class__, DeclarativeMeta):
return json.loads(json.dumps(obj,AlchemyEncoder))
else:
return json.loads

最新文章

  1. Get radio selected value
  2. web框架--flask
  3. iOS Mail.app inject kit
  4. spring事件通知机制详解
  5. 各种数据处理方案(SQL,NoSQL,其他)的应用场景
  6. C#中Messagebox.Show()常用参数用法详解
  7. poj 1611 The Suspects(简单并查集)
  8. plsql的参数IN和OUT
  9. JavaScript高级程序设计57.pdf
  10. Ubuntu下安装和配置mysql
  11. 小蚂蚁搬家<贪心>
  12. opencv 增强现实(一):特征点检测
  13. 《Miracle-House团队》第二次作业:西小餐项目开题报告
  14. 安卓——Activity生命周期、
  15. Recyclerview 实现上拉加载更多
  16. [UE4]自动旋转组件
  17. springboot jpa sql查询与传值
  18. Linux移植之内核启动过程start_kernel函数简析
  19. Spark笔记之数据本地性(data locality)
  20. Git 代码管理命令

热门文章

  1. notepad++使用正则表达式的查找替换
  2. 进程管理工具supervisor
  3. java.lang.String里面的trim()方法——删除首尾空格
  4. XML基本知识点——思维导图
  5. WebUploader 解决文件多次上传和删除上传文件的问题
  6. JSON和GSON的使用
  7. 计算机网络 - IP和端口
  8. T-SQL RIGHT JOIN
  9. Minhash 算法 及其应用
  10. 使用maven时报错Dynamic Web Module 3.1 requires Java 1.7 or newe