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 Django做网页
Nov 04 Python
使用python将mdb数据库文件导入postgresql数据库示例
Feb 17 Python
python结合shell查询google关键词排名的实现代码
Feb 27 Python
Python爬虫利用cookie实现模拟登陆实例详解
Jan 12 Python
浅谈pandas用groupby后对层级索引levels的处理方法
Nov 06 Python
python 获得任意路径下的文件及其根目录的方法
Feb 16 Python
Django使用Jinja2模板引擎的示例代码
Aug 09 Python
Python OpenCV实现鼠标画框效果
Aug 19 Python
Python模块future用法原理详解
Jan 20 Python
Python实现代码块儿折叠
Apr 15 Python
Visual Studio code 配置Python开发环境
Sep 11 Python
Python3爬虫RedisDump的安装步骤
Feb 20 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
咖啡与水的关系
2021/03/03 冲泡冲煮
提问的智慧(2)
2006/10/09 PHP
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
PHP中的日期加减方法示例
2014/08/21 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
Exjs 入门篇
2010/04/07 Javascript
JavaScript继承方式实例
2010/10/29 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
jQuery CSS()方法改变现有的CSS样式表
2014/09/09 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
2016/08/29 Javascript
react-router JS 控制路由跳转实例
2017/06/15 Javascript
详谈AngularJs 控制器、数据绑定、作用域
2017/07/09 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
让Vue也可以使用Redux的方法
2018/05/23 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
Element-ui中元素滚动时el-option超出元素区域的问题
2019/05/30 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
浅谈Vue 自动化部署打包上线
2020/06/14 Javascript
JS实现炫酷雪花飘落效果
2020/08/19 Javascript
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
Python实现的列表排序、反转操作示例
2019/03/13 Python
python基于SMTP协议发送邮件
2019/05/31 Python
Python利用matplotlib做图中图及次坐标轴的实例
2019/07/08 Python
python通过opencv实现图片裁剪原理解析
2020/01/19 Python
python help函数实例用法
2020/12/06 Python
英国复古和经典球衣网站:Vintage Football Shirts
2018/10/05 全球购物
屈臣氏官方旗舰店:亚洲享负盛名的保健及美妆零售商
2019/03/15 全球购物
KELLER SPORTS荷兰:在线订购最好的运动产品
2020/10/13 全球购物
小学爱国卫生月活动总结
2014/06/30 职场文书
html5调用摄像头截图功能
2022/01/18 Javascript
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript