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 相关文章推荐
Python实现动态加载模块、类、函数的方法分析
Jul 18 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
Python2中文处理纪要的实现方法
Mar 10 Python
利用python如何处理nc数据详解
May 23 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
python dataframe向下向上填充,fillna和ffill的方法
Nov 28 Python
Django CSRF认证的几种解决方案
Mar 03 Python
python检查目录文件权限并修改目录文件权限的操作
Mar 11 Python
Python脚本实现监听服务器的思路代码详解
May 28 Python
详解Python IO编程
Jul 24 Python
使用numpngw和matplotlib生成png动画的示例代码
Jan 24 Python
Python+MySQL随机试卷及答案生成程序的示例代码
Feb 01 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
采用memcache在web集群中实现session的同步会话
2014/07/05 PHP
各种快递查询--Api接口
2016/04/26 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
jQuery使用手册之一
2007/03/24 Javascript
JAVASCRIPT keycode总结
2009/02/04 Javascript
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
使用JavaScript保存文本文件到本地的两种方法
2019/01/22 Javascript
vue+element搭建后台小总结 el-dropdown下拉功能
2020/04/10 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
python django事务transaction源码分析详解
2017/03/17 Python
Python实战小程序利用matplotlib模块画图代码分享
2017/12/09 Python
浅谈flask截获所有访问及before/after_request修饰器
2018/01/18 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
Python3.5内置模块之random模块用法实例分析
2019/04/26 Python
Python求均值,方差,标准差的实例
2019/06/29 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
Python实现FLV视频拼接功能
2020/01/21 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
2020/06/24 Python
用python对oracle进行简单性能测试
2020/12/05 Python
用Python制作音乐海报
2021/01/26 Python
Pytorch如何切换 cpu和gpu的使用详解
2021/03/01 Python
纯CSS3绘制打火机动画火焰效果
2016/07/18 HTML / CSS
简历中的自我评价怎么写
2014/01/29 职场文书
个人自我评价范文
2014/02/05 职场文书
标准的毕业生自荐信
2014/04/20 职场文书
实习证明模板
2015/06/16 职场文书
债务追讨律师函
2015/06/24 职场文书
感谢信的技巧及范例
2019/05/15 职场文书
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python
25张裸眼3D图片,带你重温童年的记忆,感受3D的魅力
2022/02/06 杂记