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实现读取目录所有文件的文件名并保存到txt文件代码
Nov 22 Python
详解Django之admin组件的使用和源码剖析
May 04 Python
python 对字典按照value进行排序的方法
May 09 Python
详解Python中的各种转义符\n\r\t
Jul 10 Python
Python的log日志功能及设置方法
Jul 11 Python
Django logging配置及使用详解
Jul 23 Python
Python 导入文件过程图解
Oct 15 Python
基于h5py的使用及数据封装代码
Dec 26 Python
Python基于Hypothesis测试库生成测试数据
Apr 29 Python
基于python tkinter的点名小程序功能的实例代码
Aug 22 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 Python
Python图像处理之图像拼接
Apr 28 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导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
php实现文件下载功能的几个代码分享
2014/05/10 PHP
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
PHP之认识(二)关于Traits的用法详解
2019/04/11 PHP
使Ext的Template可以解析二层的json数据的方法
2007/12/22 Javascript
jquery选择器(常用选择器说明)
2010/09/28 Javascript
js Form.elements[i]的使用实例
2011/11/13 Javascript
整理8个很棒的 jQuery 倒计时插件和教程
2011/12/12 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
2013/11/25 Javascript
JavaScript实现select添加option
2015/07/03 Javascript
js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
2015/09/14 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
2016/01/29 Javascript
JS代码实现table数据分页效果
2016/05/26 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
移动端js图片查看器
2016/11/17 Javascript
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
2017/06/25 Javascript
React服务端渲染(总结)
2017/07/01 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
JS+HTML+CSS实现轮播效果
2017/11/28 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
[01:08:48]LGD vs OG 2018国际邀请赛淘汰赛BO3 第三场 8.25
2018/08/29 DOTA
Python程序设计入门(4)模块和包
2014/06/16 Python
Python Deque 模块使用详解
2014/07/04 Python
python中enumerate函数遍历元素用法分析
2016/03/11 Python
python脚本监控docker容器
2016/04/27 Python
python中安装模块包版本冲突问题的解决
2017/05/02 Python
Python实现类的创建与使用方法示例
2017/07/25 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
Python中使用socks5设置全局代理的方法示例
2020/04/15 Python
让Django的BooleanField支持字符串形式的输入方式
2020/05/20 Python
银行实习生的自我评价
2013/12/09 职场文书
人事任命书怎么写
2014/06/05 职场文书
中考标语大全
2014/06/05 职场文书
Pytorch GPU内存占用很高,但是利用率很低如何解决
2021/06/01 Python
idea编译器vue缩进报错问题场景分析
2021/07/04 Vue.js