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中字符编码简介、方法及使用建议
Jan 08 Python
分析Python的Django框架的运行方式及处理流程
Apr 08 Python
python UNIX_TIMESTAMP时间处理方法分析
Apr 18 Python
利用Python循环(包括while&amp;for)各种打印九九乘法表的实例
Nov 06 Python
django开发教程之利用缓存文件进行页面缓存的方法
Nov 10 Python
Python中的函数式编程:不可变的数据结构
Oct 08 Python
浅析python中的迭代与迭代对象
Oct 08 Python
Ubuntu18.04下python版本完美切换的解决方法
Jun 14 Python
决策树剪枝算法的python实现方法详解
Sep 18 Python
Python字典生成式、集合生成式、生成器用法实例分析
Jan 07 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
Apr 20 Python
用 Python 元类的特性实现 ORM 框架
May 19 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 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
HTTP状态代码以及定义(解释)
2007/02/02 Javascript
js实现在字符串中提取数字
2013/11/05 Javascript
jquery实现点击展开列表同时隐藏其他列表
2015/08/10 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
如何使用Vuex+Vue.js构建单页应用
2016/10/27 Javascript
jQuery实现的无缝广告图片左右滚动功能详解
2016/12/24 Javascript
Js实现中国公民身份证号码有效性验证实例代码
2017/05/03 Javascript
jQuery实现简单的手风琴效果
2020/04/17 jQuery
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
Python搜索引擎实现原理和方法
2017/11/27 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
python 获取微信好友列表的方法(微信web)
2019/02/21 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
Python如何使用turtle库绘制图形
2020/02/26 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
Pandas的数据过滤实现
2021/01/15 Python
迟到检讨书800字
2014/01/13 职场文书
超市采购员岗位职责
2014/02/01 职场文书
授权委托书怎么写
2014/04/03 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
PyTorch device与cuda.device用法
2022/04/03 Python
Java线程的6种状态与生命周期
2022/05/11 Java/Android