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框架的视图中使用Session的方法
Jul 23 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
Jul 22 Python
python实现微信跳一跳辅助工具步骤详解
Jan 04 Python
python中多个装饰器的执行顺序详解
Oct 08 Python
Django项目中添加ldap登陆认证功能的实现
Apr 04 Python
python应用文件读取与登录注册功能
Sep 23 Python
python pandas.DataFrame.loc函数使用详解
Mar 26 Python
Python使用文件操作实现一个XX信息管理系统的示例
Jul 02 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 Python
如何让PyQt5中QWebEngineView与JavaScript交互
Oct 21 Python
python基于opencv实现人脸识别
Jan 04 Python
将不规则的Python多维数组拉平到一维的方法实现
Jan 11 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中通过ADO调用Access数据库的方法测试不通过
2006/12/31 PHP
php实现图片上传、剪切功能
2016/05/07 PHP
PHP文件操作详解
2016/12/30 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
2019/05/09 PHP
Alliance vs AM BO3 第二场2.13
2021/03/10 DOTA
完美解决AJAX跨域问题
2013/11/01 Javascript
Javascript 实现复制(Copy)动作方法大全
2014/06/20 Javascript
Js为表单动态添加节点内容的方法
2015/02/10 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
vue2.0结合Element实现select动态控制input禁用实例
2017/05/12 Javascript
bootstrap警告框示例代码分享
2017/05/17 Javascript
React props和state属性的具体使用方法
2018/04/12 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
vue发送websocket请求和http post请求的实例代码
2019/07/11 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
2020/10/14 Javascript
vue element el-transfer增加拖拽功能
2021/01/15 Vue.js
Python实现读取及写入csv文件的方法示例
2018/01/12 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
2019/08/12 Python
Python3爬虫中关于中文分词的详解
2020/07/29 Python
Pytorch生成随机数Tensor的方法汇总
2020/09/09 Python
Reebok俄罗斯官方网上商店:购买锐步运动服装和鞋子
2016/09/26 全球购物
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
企业面试题试卷附带答案
2015/12/20 面试题
最热门的自我评价
2013/12/30 职场文书
戒赌保证书
2015/05/11 职场文书
晚会开场白和结束语
2015/05/29 职场文书
实习证明模板
2015/06/16 职场文书
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS