Python json.dumps 特殊数据类型的自定义序列化操作

场景描述:

  Python标准库中的json模块,集成了将数据序列化处理的功能;在使用json.dumps()方法序列化数据时候,如果目标数据中存在datetime数据类型,执行操作时,

会抛出异常:TypeError: datetime.datetime(2016, 12, 10, 11, 04, 21) is not JSON serializable

那么遇到json.dumps序列化不支持的数据类型,该怎么办!

首先,我们先来了解一下,json.dumps,序列化操作默认支持的数据类型:

Python中的序列化操作,主要应用在将数据库中检索的数据返回给客户端用户时;一般情况下,后端返回给前端Ajax请求的数据格式都是Json格式。

1、serializers

from django.core import serializers

ret = models.BookType.objects.all()

data = serializers.serialize("json", ret)

2、json.dumps

import json

#ret = models.BookType.objects.all().values(‘caption‘)
ret = models.BookType.objects.all().values_list(‘caption‘)

ret=list(ret)

result = json.dumps(ret)

对于,特殊的数据类型,例如,datatime() 时间类型,json.dumps不支持该数据类型的序列化;那么就可以通过自定义处理来扩展。

import json
from datetime import date
from datetime import datetime 

class JsonCustomEncoder(json.JSONEncoder): 

    def default(self, field): 

        if isinstance(field, datetime):
            return o.strftime(‘%Y-%m-%d %H:%M:%S‘)
        elif isinstance(field, date):
            return o.strftime(‘%Y-%m-%d‘)
        else:
            return json.JSONEncoder.default(self, field) 

# ds = json.dumps(d, cls=JsonCustomEncoder) 

使用的时候,只要在json.dumps()方法中增加一个cls参数即可:

实例代码:

参考:https://my.oschina.net/whp/blog/111173

时间: 2024-10-27 10:14:21

Python json.dumps 特殊数据类型的自定义序列化操作的相关文章

YxdJSON - Delphi 高性能 JSON 库(支持RTTI和序列化操作)

Delphi 高性能 JSON 库(支持RTTI和序列化操作) 支持平台: Windows, Android, iOS, Mac OS https://github.com/yangyxd/YxdJson

python json.dumps() 中文乱码问题

python 输出一串中文字符,在控制台上(控制台使用UTF-8编码)通过print 可以正常显示,但是写入到文件中之后,中文字符都输出成ascii编码了.英文字符能正常显示可读字符. 原因:json.dumps 序列化时默认使用的ascii编码,想输出真正的中文需要指定ensure_ascii=False:更深入分析,是应为dJSON object 不是单纯的unicode实现,而是包含了混合的unicode编码以及已经用utf-8编码之后的字符串. 可行的方式如下: 1 import os

python json dumps与loads有可能犯的错误

json.dumps() 是将一个Python数据结构转换为一个JSON编码的字符串 json.loads() 是将一个JSON编码的字符串转换为一个Python数据结构 如下: >>> import json >>> a={'name':'xiaoming'} >>> json.dumps(a) '{"name": "xiaoming"}' >>> b='{"name":

python json.dumps()函数输出json格式,使用ensure_ascii参数对中文输入的支持

在python使用过程中,输入中文,不能正常的输出,可以使用ensure_ascii参数来解决不能输入中文的问题 代码块: import json friends={"name":"王虎","name1":"张二","name2":"姚晨"}print(json.dumps(friends)) 执行结果: 输出的中文是中文的ascii 字符码,而不是真正的中文. 这是因为json.dum

python json.dumps() json.dump()的区别

首先说明基本功能: dumps是将dict转化成str格式,loads是将str转化成dict格式. dump和load也是类似的功能,只是与文件操作结合起来了. 看代码实例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 In [1]: import json In [2]: a = {'name': 'wang', 'age': 29} In [3]: b = json.dumps(a) In [4]: print b, type(b) {"age": 29, 

第8月第12天 python json.dumps

1.json.dumps return JsonResponse({ 'status': WechatMessage.POST_METHOD_REQUIRED[1], 'status_code': WechatMessage.POST_METHOD_REQUIRED[0] }) import json from django.shortcuts import HttpResponse def JsonResponse(params): return HttpResponse(json.dumps

python json.dumps 中的ensure_ascii 参数引起的中文编码问题

在使用json.dumps时要注意一个问题 >>> import json >>> print json.dumps('中国') "\u4e2d\u56fd" 输出的会是 '中国' 中的ascii 字符码,而不是真正的中文. 这是因为json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False: >>> import json >>> print jso

[转]python json.dumps 中的ensure_ascii 参数引起的中文编码

本文转自: 梁小白博客(http://biangbiang.cnblogs.com) 在使用json.dumps时要注意一个问题 >>> import json >>> print json.dumps('中国') \u4e2d\u56fd 输出的会是 中国中的ascii 字符码,而不是真正的中文. 这是因为json.dumps 序列化时对中文默认使用的ascii编码. 想输出真正的中文需要指定ensure_ascii=False: >>> impor

Python json.dumps 中文乱码解决

需要对外提供一个接口,输出的内容里有中文.结果打开一看,返回的是这么一串东西. "owner": "\u8d75\u7acb\u5792" 其实,这是用ASCII输出的转义字符,解决起来很简单.json.dumps方法有一个ensure_ascii方法,设为False即可,默认为True.加上encoding="utf-8",用utf8来encode中文. 调用方法 json.dumps(mydata, ensure_ascii=False, e