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中面向对象编程的相关知识
May 25 Python
Python实现简单拆分PDF文件的方法
Jul 30 Python
python实现下载指定网址所有图片的方法
Aug 08 Python
详解tensorflow实现迁移学习实例
Feb 10 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
Jun 11 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
Oct 11 Python
对django中render()与render_to_response()的区别详解
Oct 16 Python
python 梯度法求解函数极值的实例
Jul 10 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
Aug 19 Python
python学习将数据写入文件并保存方法
Jun 07 Python
Python使用xpath实现图片爬取
Sep 16 Python
python实现不同数据库间数据同步功能
Feb 25 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
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
对于PHP 5.4 你必须要知道的
2013/08/07 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
xml和web特殊字符
2009/04/28 Javascript
jquery中动态效果小结
2010/12/16 Javascript
JS实现一键回顶功能示例代码
2013/10/28 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
2016/01/22 Javascript
简单实现jQuery多选框功能
2017/01/09 Javascript
js实现文字无缝向上滚动
2017/02/16 Javascript
3种vue组件的书写形式
2017/11/29 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
2019/05/10 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
[00:12]2018DOTA2亚洲邀请赛 Sccc亮相SOLO赛,今年他又会有什么样的战绩?
2018/04/06 DOTA
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
Python 正则表达式实现计算器功能
2017/04/29 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
2018/05/02 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
英国标志性奢侈品牌:Burberry
2016/07/28 全球购物
南京某软件公司的.net面试题
2015/11/30 面试题
水污染治理专业毕业生推荐信
2013/11/14 职场文书
乐观大学生的自我评价
2014/01/10 职场文书
高中同学聚会邀请函
2014/01/11 职场文书
棉花姑娘教学反思
2014/02/15 职场文书
职位说明书范文
2014/05/07 职场文书
2014年领导班子工作总结
2014/12/11 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书
安全学习心得体会范文
2016/01/18 职场文书
QT与javascript交互数据的实现
2021/05/26 Javascript