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实现计算文件夹下.h和.cpp文件的总行数
Apr 23 Python
Python的Bottle框架中返回静态文件和JSON对象的方法
Apr 30 Python
初步剖析C语言编程中的结构体
Jan 16 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
Aug 27 Python
如何解决django-celery启动后迅速关闭
Oct 16 Python
wxPython之wx.DC绘制形状
Nov 19 Python
解决python replace函数替换无效问题
Jan 18 Python
python相对企业语言优势在哪
Jun 12 Python
导致python中import错误的原因是什么
Jul 01 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
Oct 15 Python
Python趣味爬虫之用Python实现智慧校园一键评教
May 28 Python
如何判断pytorch是否支持GPU加速
Jun 01 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 ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
php实现的http请求封装示例
2016/11/08 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
javascript读取RSS数据
2007/01/20 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
jQuery之ajax技术的详细介绍
2013/06/19 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
微信小程序 设置启动页面的两种方法
2017/03/09 Javascript
Node.js实现批量下载图片简单操作示例
2020/01/18 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
2020/03/12 Javascript
解决vue-loader加载不上的问题
2020/10/21 Javascript
python pandas dataframe 按列或者按行合并的方法
2018/04/12 Python
在Python中使用Neo4j的方法
2019/03/14 Python
分享一个pycharm专业版安装的永久使用方法
2019/09/24 Python
MNIST数据集转化为二维图片的实现示例
2020/01/10 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
超级实用的8个Python列表技巧
2020/08/24 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
CSS代码检查工具stylelint的使用方法详解
2021/03/27 HTML / CSS
单位承诺书格式
2014/05/21 职场文书
学校清明节活动总结
2014/07/04 职场文书
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
春节超市活动方案
2014/08/14 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
2014年初三班主任工作总结
2014/12/05 职场文书
旷课检讨书
2015/01/26 职场文书
在 Golang 中实现 Cache::remember 方法详解
2021/03/30 Python
golang 接口嵌套实现复用的操作
2021/04/29 Golang
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技