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模块学习 re 正则表达式
May 19 Python
python类装饰器用法实例
Jun 04 Python
Python tkinter模块中类继承的三种方式分析
Aug 08 Python
python保存文件方法小结
Jul 27 Python
用Python中的turtle模块画图两只小羊方法
Apr 09 Python
使用pycharm在本地开发并实时同步到服务器
Aug 02 Python
Python socket聊天脚本代码实例
Jan 02 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
Jun 10 Python
解析Tensorflow之MNIST的使用
Jun 30 Python
python3实现将json对象存入Redis以及数据的导入导出
Jul 16 Python
Python打包exe时各种异常处理方案总结
May 18 Python
Python基础教程,Python入门教程(超详细)
Jun 24 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文档的代码
2008/04/09 PHP
php Smarty 字符比较代码
2011/02/27 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
2014/06/27 PHP
PHP开发注意事项总结
2015/02/04 PHP
php如何获取文件的扩展名
2015/10/28 PHP
php blowfish加密解密算法
2016/07/02 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
Laravel 5.5 异常处理 &amp; 错误日志的解决
2019/10/17 PHP
javascript 控制弹出窗口
2007/04/10 Javascript
javascript中利用数组实现的循环队列代码
2010/01/24 Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
2011/08/15 Javascript
用正则表达式替换图片地址img标签
2013/11/22 Javascript
JS实现自动变化的导航菜单效果代码
2015/09/09 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
JavaScript Date对象详解
2016/03/01 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
require.js中的define函数详解
2017/07/10 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
vue-router 手势滑动触发返回功能
2018/09/30 Javascript
linux下安装easy_install的方法
2013/02/10 Python
python异常和文件处理机制详解
2016/07/19 Python
Python将多份excel表格整理成一份表格
2018/01/03 Python
浅谈python可视化包Bokeh
2018/02/07 Python
numpy.transpose对三维数组的转置方法
2018/04/17 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
2020/02/24 Python
利用CSS3实现进度条的两种姿势详解
2017/03/21 HTML / CSS
台湾百利市购物中心:e-Payless
2017/08/16 全球购物
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
2014/09/26 面试题
教育专业个人求职信
2013/12/02 职场文书
买房协议书
2014/04/11 职场文书
金砖之国观后感
2015/06/11 职场文书
暂住证明怎么写
2015/06/19 职场文书
go语言中http超时引发的事故解决
2021/06/02 Golang