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中用于计算对数的log()方法
May 15 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
Jun 29 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
Dec 19 Python
Python SQLite3简介
Feb 22 Python
解决matplotlib库show()方法不显示图片的问题
May 24 Python
Python unittest模块用法实例分析
May 25 Python
python定位xpath 节点位置的方法
Aug 27 Python
django重新生成数据库中的某张表方法
Aug 28 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
python生成特定分布数的实例
Dec 05 Python
解决pytorch 保存模型遇到的问题
Mar 03 Python
pycharm无法导入lxml的解决办法
Mar 31 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代码飞起来的40条小技巧(提升php效率)
2010/04/12 PHP
JpGraph php柱状图使用介绍
2011/08/23 PHP
php笔记之:AOP的应用
2013/04/24 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
javascript实现动态改变层大小的方法
2015/05/14 Javascript
Javascript中的迭代、归并方法详解
2016/06/14 Javascript
AngularJS入门之动画
2016/07/27 Javascript
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
微信小程序之GET请求的实例详解
2017/09/29 Javascript
详解js的视频和音频采集
2018/08/09 Javascript
vue 自动化路由实现代码
2019/09/03 Javascript
JS实现简易计算器
2020/02/14 Javascript
Vue.js使用axios动态获取response里的data数据操作
2020/09/08 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
Vue组件简易模拟实现购物车
2020/12/21 Vue.js
在Python中关于中文编码问题的处理建议
2015/04/08 Python
在Python的Django框架中用流响应生成CSV文件的教程
2015/05/02 Python
python基础之入门必看操作
2017/07/26 Python
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
2018/11/16 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
Python设计模式之原型模式实例详解
2019/01/18 Python
Python pygame绘制文字制作滚动文字过程解析
2019/12/12 Python
快速解释如何使用pandas的inplace参数的使用
2020/07/23 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
CSS3中currentColor关键字的妙用
2016/02/27 HTML / CSS
Finishline官网:美国一家领先的运动品牌鞋类、服装零售商
2016/07/20 全球购物
美国领先的低折扣旅行网站:Hotwire
2019/01/19 全球购物
Nebula美国官网:便携式投影仪
2019/03/15 全球购物
在C中是否有模拟继承等面向对象程序设计特性的好方法
2012/05/22 面试题
档案接收函范文
2014/01/10 职场文书
大学学习个人的自我评价
2014/02/18 职场文书
项目经理聘任书
2014/03/29 职场文书
十佳少先队员演讲稿
2014/09/12 职场文书