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实现的飞速中文网小说下载脚本
Apr 23 Python
python3 与python2 异常处理的区别与联系
Jun 19 Python
Collatz 序列、逗号代码、字符图网格实例
Jun 22 Python
Python3学习urllib的使用方法示例
Nov 29 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
May 25 Python
浅谈利用numpy对矩阵进行归一化处理的方法
Jul 11 Python
python3 实现一行输入,空格隔开的示例
Nov 14 Python
python 遍历列表提取下标和值的实例
Dec 25 Python
Python批量删除只保留最近几天table的代码实例
Apr 01 Python
Djang的model创建的字段和参数详解
Jul 27 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
Aug 27 Python
Python编程快速上手——正则表达式查找功能案例分析
Feb 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
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
php5 pdo新改动加载注意事项
2008/09/11 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
2014/08/08 PHP
PHP打开和关闭文件操作函数总结
2014/11/18 PHP
将nodejs打包工具整合到鼠标右键的方法
2013/05/11 NodeJs
js innerHTML 改变div内容的方法
2013/08/03 Javascript
JQuery中serialize()、serializeArray()和param()方法示例介绍
2014/07/31 Javascript
分享20个提升网站界面体验的jQuery插件
2014/12/15 Javascript
JavaScript高级教程5.6之基本包装类型(详细)
2015/11/23 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
2020/07/28 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
Python写的贪吃蛇游戏例子
2014/06/16 Python
Python实现的多线程http压力测试代码
2017/02/08 Python
Python 模块EasyGui详细介绍
2017/02/19 Python
Python设计模式之代理模式简单示例
2018/01/09 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
Python定时任务sched模块用法示例
2018/07/16 Python
python3 实现一行输入,空格隔开的示例
2018/11/14 Python
Django静态文件加载失败解决方案
2020/08/26 Python
python如何使用腾讯云发送短信
2020/09/17 Python
Python 利用argparse模块实现脚本命令行参数解析
2020/12/28 Python
如何提高MySql的安全性
2014/06/19 面试题
文员个人的求职信范文
2013/09/26 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
走群众路线学习笔记
2014/11/06 职场文书
幼儿园班级工作总结2015
2015/05/25 职场文书
2015年校本培训工作总结
2015/07/24 职场文书
SQL 聚合、分组和排序
2021/11/11 MySQL