Python json 错误xx is not JSON serializable解决办法


Posted in Python onMarch 15, 2017

Python json 错误xx is not JSON serializable解决办法

在使用json的时候经常会遇到xxx  is not JSON serializable,也就是无法序列化某些对象。经常使用django的同学知道django里面有个自带的Encoder来序列化时间等常用的对象。其实我们可以自己定定义对特定类型的对象的序列化,下面看下怎么定义和使用的。

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
#json_extention 
#2014-03-16 
#copyright: orangleliu 
#license: BSD 
 
''''' 
python中dumps方法很好用,可以直接把我们的dict直接序列化为json对象 
但是有的时候我们加了一些自定义的类就没法序列化了,这个时候需要 
自定义一些序列化方法 
 
参考: 
http://docs.python.org/2.7/library/json.html 
 
例如: 
In [3]: from datetime import datetime 
 
In [4]: json_1 = {'num':1112, 'date':datetime.now()} 
 
In [5]: import json 
 
In [6]: json.dumps(json_1) 
--------------------------------------------------------------------------- 
TypeError                 Traceback (most recent call last) 
D:\devsofts\python2.7\lib\site-packages\django\core\management\commands\shell.py 
c in <module>() 
----> 1 json.dumps(json_1) 
 
TypeError: datetime.datetime(2014, 3, 16, 13, 47, 37, 353000) is not JSON serial 
izable 
''' 
 
from datetime import datetime 
import json 
 
class DateEncoder(json.JSONEncoder ): 
  def default(self, obj): 
    if isinstance(obj, datetime): 
      return obj.__str__() 
    return json.JSONEncoder.default(self, obj) 
 
json_1 = {'num':1112, 'date':datetime.now()} 
print json.dumps(json_1, cls=DateEncoder) 
 
''''' 
输出结果: 
 
PS D:\code\python\python_abc> python .\json_extention.py 
{"date": "2014-03-16 13:56:39.003000", "num": 1112} 
''' 
 
#我们自定义一个类试试 
class User(object): 
  def __init__(self, name): 
    self.name = name 
 
class UserEncoder(json.JSONEncoder): 
  def default(self, obj): 
    if isinstance(obj, User): 
      return obj.name 
    return json.JSONEncoder.default(self, obj) 
 
json_2 = {'user':User('orangle')} 
print json.dumps(json_2, cls=UserEncoder) 
 
''''' 
PS D:\code\python\python_abc> python .\json_extention.py 
{"date": "2014-03-16 14:01:46.738000", "num": 1112} 
{"user": "orangle"} 
 
'''

定义处理方法是继承json.JSONEncoder的一个子类,使用的时候是在dumps方法的cls函数中添加自定义的处理方法。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
Jul 04 Python
sublime text 3配置使用python操作方法
Jun 11 Python
python 字符串转列表 list 出现\ufeff的解决方法
Jun 22 Python
利用Python破解斗地主残局详解
Jun 30 Python
python中WSGI是什么,Python应用WSGI详解
Nov 24 Python
python opencv 图像拼接的实现方法
Jun 27 Python
Python求均值,方差,标准差的实例
Jun 29 Python
pytorch torchvision.ImageFolder的用法介绍
Feb 20 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
Feb 28 Python
python tkinter 设置窗口大小不可缩放实例
Mar 04 Python
Python下划线5种含义代码实例解析
Jul 10 Python
python - timeit 时间模块
Apr 06 Python
200行自定义python异步非阻塞Web框架
Mar 15 #Python
Python实现简易端口扫描器代码实例
Mar 15 #Python
Python使用sftp实现上传和下载功能(实例代码)
Mar 14 #Python
Python实现Youku视频批量下载功能
Mar 14 #Python
Python实现视频下载功能
Mar 14 #Python
python 实现自动远程登陆scp文件实例代码
Mar 13 #Python
python executemany的使用及注意事项
Mar 13 #Python
You might like
PHP的FTP学习(二)[转自奥索]
2006/10/09 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
2012/09/07 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
2016/11/25 PHP
Thinkphp5+uploadify实现的文件上传功能示例
2018/05/26 PHP
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
DLL+ ActiveX控件+WEB页面调用例子
2010/08/07 Javascript
返回对象在当前级别中是第几个元素的实现代码
2011/01/20 Javascript
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
2016/05/31 Javascript
js实现文字超出部分用省略号代替实例代码
2016/09/01 Javascript
jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
2016/09/21 Javascript
JavaScript之DOM_动力节点Java学院整理
2017/07/03 Javascript
JS实现的JSON序列化操作简单示例
2018/07/02 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
Node.js 实现远程桌面监控的方法步骤
2019/07/02 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
2018/01/02 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
python tkinter图形界面代码统计工具(更新)
2019/09/18 Python
python标准库sys和OS的函数使用方法与实例详解
2020/02/12 Python
信号生成及DFT的python实现方式
2020/02/25 Python
python学生管理系统的实现
2020/04/05 Python
美国亚洲时尚和美容产品的一站式网上商店:Stylevana
2019/09/05 全球购物
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
敬老月活动总结
2014/08/28 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
离婚协议书怎样才有法律效力
2014/10/10 职场文书
撤诉申请怎么写
2015/05/19 职场文书
经典励志格言:每日一句,让你每天充满能量
2019/08/16 职场文书