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 27 Python
python虚拟环境的安装配置图文教程
Oct 20 Python
python中协程实现TCP连接的实例分析
Oct 14 Python
python 循环读取txt文档 并转换成csv的方法
Oct 26 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
Python中调用其他程序的方式详解
Aug 06 Python
Python K最近邻从原理到实现的方法
Aug 15 Python
python中if及if-else如何使用
Jun 02 Python
详细分析Python可变对象和不可变对象
Jul 09 Python
在CentOS7下安装Python3教程解析
Jul 09 Python
Python django框架 web端视频加密的实例详解
Nov 20 Python
python​格式化字符串
Apr 20 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性能优化工具篇Benchmark类调试执行时间
2011/12/06 PHP
eAccelerator的安装与使用详解
2013/06/13 PHP
Zend Framework入门应用实例详解
2016/12/11 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
一些常用的JavaScript函数(json)附详细说明
2011/05/25 Javascript
event.currentTarget与event.target的区别介绍
2012/12/31 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
jQuery实现的导航下拉菜单效果示例
2016/09/05 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
2017/06/16 Javascript
pageGroup.js实现分页功能
2019/07/27 Javascript
Vue中rem与postcss-pxtorem的应用详解
2019/11/20 Javascript
JavaScript交换两个变量方法实例
2019/11/25 Javascript
JS中的const命令你真懂它吗
2020/03/08 Javascript
浅谈React中组件逻辑复用的那些事儿
2020/05/21 Javascript
Jquery Fade用法详解
2020/11/06 jQuery
python的id()函数解密过程
2012/12/25 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
CSS3的Flexbox布局的简明入门指南
2016/04/08 HTML / CSS
html5的canvas元素使用方法介绍(画矩形、画折线、圆形)
2014/04/14 HTML / CSS
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
自考生自我鉴定范文
2013/10/01 职场文书
电子专业推荐信范文
2013/11/18 职场文书
上班看电影检讨书
2014/02/12 职场文书
2014年党的群众路线教育实践活动整改措施(个人版)
2014/09/25 职场文书
2014年班主任德育工作总结
2014/12/05 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android
python 多态 协议 鸭子类型详解
2021/11/27 Python