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 logging模块的使用方法
Apr 17 Python
python寻找list中最大值、最小值并返回其所在位置的方法
Jun 27 Python
Windows下Anaconda2安装NLTK教程
Sep 19 Python
python调用matlab的m自定义函数方法
Feb 18 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
Jun 17 Python
Python numpy线性代数用法实例解析
Nov 15 Python
pytorch AvgPool2d函数使用详解
Jan 03 Python
什么是python的列表推导式
May 26 Python
浅谈Python数学建模之数据导入
Jun 23 Python
通过Python把学姐照片做成拼图游戏
Feb 15 Python
python对文档中元素删除,替换操作
Apr 02 Python
微信小程序调用python模型
Apr 21 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中explode与split的区别介绍
2012/10/03 PHP
php获取参数的几种方法总结
2014/02/18 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
举例详解PHP脚本的测试方法
2015/08/05 PHP
jQuery常见开发技巧详细整理
2013/01/02 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
javascript firefox 自动加载iframe 自动调整高宽示例
2013/08/27 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
2015/08/31 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
JS实现简单短信验证码界面
2017/08/07 Javascript
解决vue打包项目后刷新404的问题
2018/03/06 Javascript
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
vue路由结构可设一层方便动态添加路由操作
2020/08/31 Javascript
python简单获取本机计算机名和IP地址的方法
2015/06/03 Python
深入讲解Java编程中类的生命周期
2016/02/05 Python
Python如何爬取实时变化的WebSocket数据的方法
2019/03/09 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
Python匿名函数及应用示例
2019/04/09 Python
NumPy 基本切片和索引的具体使用方法
2019/04/24 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
python破解同事的压缩包密码
2020/10/14 Python
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
应届毕业生个人求职自荐信
2014/01/06 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
机关党总支领导班子整改方案
2014/09/20 职场文书
项目经理助理岗位职责
2015/04/13 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技
微软官方消息,在 2023 年 4 月 11 日之后微软将不再为 Office 2013 和 Skype for Business 2015 提供安全更新
2022/04/21 数码科技