序列化 SqlAlchemy 的结果为 json 字符串
http://my.oschina.net/gongshang/blog/395431?p=1
在设计 RESTful 的网站时,我们总是希望 ORM 框架返回的结果是可以直接给 View 层使用的 JSON 字符串。但是 Sqlalchemy 的返回结果直接使用 json.dumps(res) 会报 TypeError 的错误。
解决方案
其实就像遇到 datetime 无法使用 json.dumps() 序列化的问题一样,我们需要继承一个json.JSONEncoder。
- from sqlalchemy.ext.declarative import DeclarativeMeta
- 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']:
- data = obj.__getattribute__(field)
- try:
- json.dumps(data) # this will fail on non-encodable values, like other classes
- fields[field] = data
- except TypeError: # 添加了对datetime的处理
- if isinstance(data, datetime.datetime):
- fields[field] = data.isoformat()
- elif isinstance(data, datetime.date):
- fields[field] = data.isoformat()
- elif isinstance(data, datetime.timedelta):
- fields[field] = (datetime.datetime.min + data).time().isoformat()
- else:
- fields[field] = None
- # a json-encodable dict
- return fields
- return json.JSONEncoder.default(self, obj)
参考地址: stackoverflow ,在其基础上添加了对datatime的一个简单处理。
调用的时候如下:
- c = YourAlchemyClass()
- print json.dumps(c, cls=AlchemyEncoder)
序列化 SqlAlchemy 的结果为 json 字符串的更多相关文章
- Json序列化与反序列化(对象与Json字符串的转换)--C#
public class JsonHelper { #region Json序列化与反序列化 /// <summary> /// 将json转化为对象 /// (需要提前构造好结构一致的M ...
- 序列化LinkedHashMap,有序输出Json字符串
LinkedHashMap本身是有序的,使用JDK自带的序列化代码或者fastJson代码序列化后,字符串并非按照插入顺序输出 Map<String,String> linkedMap=n ...
- 极简单的方式序列化sqlalchemy结果集为JSON
继承 json.JSONEncoder 实现一个针对sqlalchemy返回类型的处理方式. sqlalchemy的返回类型有大都有两种,一种是Model对象,一种是Query集合(只查询部分字段). ...
- 【Python】极简单的方式序列化sqlalchemy结果集为JSON
继承 json.JSONEncoder 实现一个针对sqlalchemy返回类型的处理方式. sqlalchemy的返回类型有大都有两种,一种是Model对象,一种是Query集合(只查询部分字段). ...
- ASP.NET用SQL Server中的数据来生成JSON字符串
原文引自: 作者: 缺水的海豚 来源: 博客园 发布时间: 2010-09-21 21:47 阅读: 6136 次 推荐: 0 原文链接 [收藏] 摘要:ExtJs用到的数据内容基本 ...
- C#将JSON字符串对象序列化与反序列化
C#将对象序列化成JSON字符串 public string GetJsonString() { List<Product> products = new List<Product& ...
- C# JSON字符串序列化与反序列化
JSON与c#对象转换http://hi.baidu.com/donick/item/4d741338870c91fe97f88d33 C# JSON字符串序列化与反序列化 – http://www. ...
- .NET中如何使用反序列化JSON字符串/序列化泛型对象toJsonStr
在进行 .NET Web MVC 框架开发的网站程序的时候,我们都会遇到最关键的问题,数据传输. .NET MVC 4中的ControllerBase类建议我们用ViewBag动态数据字典形式(t ...
- 使用JavaScriptSerializer序列化集合、字典、数组、DataTable为JSON字符串 分类: 前端 数据格式 JSON 2014-10-30 14:08 169人阅读 评论(0) 收藏
一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大 ...
随机推荐
- Spyder如何在弹出框绘图【转】
本文转载自:https://blog.csdn.net/weixin_39231685/article/details/81028833 Spyder绘图默认出现在console面板,图片无法放大,看 ...
- grep 使用场景
(1)结合find命令和管道 你的一个音乐文件夹里有多种格式的文件,而你只想找到艺术家jay的mp3文件,并且不含有任何的混合音轨 find . -name "*mp3" | ...
- JQuery -- Jquery 中的Ajax, Jquery解析xml文件
1. JQuery 对 Ajax 操作进行了封装,在 jQuery 中最底层的方法时 $.ajax(), 第二层是 load(), $.get() 和 $.post(),第三层是$.getScript ...
- Maven到底是个啥玩意
Maven,是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. 上面是百度百科对Maven的正式介绍,如果你是Maven初学者,我估计你看完之后心中肯 ...
- 禁用Browser Link
Browser Link是VS 2013开始引入的一个强大功能,让前端代码(比如AngularJS的代码)在VS中的修改更加轻而易举. 前端代码是运行在浏览器中,而Visual Studio通常只会和 ...
- sizeof结构体
规则1:结构体的对折长度为其基本数据成员的长度的最大值. 规则2:指定边界情况下,结构体的对折长度为自身对折长度和指定对折长度中较小者. 规则3:当行内结构体的基本数据成员的起始地址必须为其长度的整数 ...
- opencv:图像的创建和储存
示例代码: #include <opencv.hpp> #include <vector> using namespace std; using namespace cv; v ...
- 大马猴队-Alpha阶段项目复审
队名 优点 缺点 名次 菜鸡互坑队 经典游戏,情怀加分. 刷新的苹果会在蛇身上出现 14 菜鸡互啄 利用python语言实现git版本管理,典型用户清晰. 没有很好地分析用户痛点,没有测试计划 4 ...
- react layout init
class Layout extends React.Component { constructor(props) { super(props); } render() { return ( < ...
- css3 伪类
::selection { 选中后的样式 } 链接 p:only-child p的父级只有一个p标签 p:only-of-type p的父级有一个p标签, 但还可以包含其他标签 p:fis ...