简介:由于json.dumps() 只能序列化Python基本数据类型,如果我们想要在数据中掺杂时间对象,或者自定义类的对象则会造成序列化数据的失败,因此json.dumps() 提供了一个属性 cls=" ",可以自定义json类,来自定制我们需要序列化对象的返回值类型,进而实现数据的格式化,下面通过一个示例来进行展示。

 1 from datetime import datetime
2 from datetime import date
3 import json
4
5 #自定义json扩展功能类
6 class JsonSerilize(json.JSONEncoder):
7 def default(self, o):
8 if isinstance(o, datetime): #如果序列化对象为datetime类型
9 return o.strftime("%Y-%m-%d %M:%H:%S");
10 elif isinstance(o, date): #如果序列化对象为date类型
11 return o.strftime("%Y-%m-%d");
12 elif isinstance(o, User): #如果序列化对象为User类型
13 return o.__dict__;
14 else:
15 return json.JSONEncoder.default(self, o); #如果不是上述类型,就按照json默认序列化方式操作
16
17 #自定义普通类
18 class User():
19 def __init__(self):
20 self.name = "kelvin"
21 self.age = 18
22
23 #测试需要的序列化数据
24 dict = {
25 "status": True,
26 "date": datetime.now(),
27 "obj":User()
28 }
29
30 #直接进行序列化,结果报错
31 # print(json.dumps(dict)) #报错 TypeError: Object of type datetime is not JSON serializable
32
33 #在dumps中使用cls=“自定义json类”,成功执行
34 print(json.dumps(dict, cls=JsonSerilize)) # 正确执行:{"status": true, "date": "2020-03-28 21:21:50"}
35 print(json.dumps(dict, cls=JsonSerilize)) # 正确执行:{"status": true, "date": "2020-03-28 24:21:13", "obj": {"name": "kelvin", "age": 18}}

json扩展之自定义序列化方式的更多相关文章

  1. 重点关注之自定义序列化方式(Protobuf和Msgpack)

    除了默认的JSON和XML序列化器外,如果想使用其它格式的(比如二进制)序列化器,也是可以的.比如著名的Protobuf和Msgpack,它们都是二进制的序列化器,特点是速度快,体积小.使用方法如下. ...

  2. WeihanLi.Redis自定义序列化及压缩方式

    WeihanLi.Redis自定义序列化及压缩方式 Intro WeihanLi.Redis 是基于 StackExchange.Redis 的扩展,提供了一些常用的业务组件和对泛型的更好支持,默认使 ...

  3. Newtonsoft.Json高级用法 1.忽略某些属性 2.默认值的处理 3.空值的处理 4.支持非公共成员 5.日期处理 6.自定义序列化的字段名称

    手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...

  4. DynamicObject扩展--实现JSON和DynamicObject的序列化与反序列化

    度娘许久,找不到我满意的答案,于是自己东凑西凑实现一个. DynamicObject扩展--实现JSON和DynamicObject的序列化与反序列化,亲测良好. 看代码 using System; ...

  5. c# 通过json.net中的JsonConverter进行自定义序列化与反序列化

    https://www.cnblogs.com/yijiayi/p/10051284.html 相信大家在工作中会经常遇见对json进行序列化与反序列化吧,但通常的序列化与反序列化中的json结构与c ...

  6. 微信小程序:app.json中通过使用扩展库userExtendedLib的方式,引入并使用weui

    微信小程序  PK  APP: 1.微信有海量⽤⼾,⽽且粘性很⾼,在微信⾥开发产品更容易触达⽤⼾:而推⼴app的成本太⾼. 2.微信小程序也可以跨平台(Android和IOS). 一.project. ...

  7. 使用Typescript重构axios(二十八)——自定义序列化请求参数

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  8. .Net Core 自定义序列化格式

    序列化对大家来说应该都不陌生,特别是现在大量使用WEBAPI,JSON满天飞,序列化操作应该经常出现在我们的代码上. 而我们最常用的序列化工具应该就是Newtonsoft.Json,当然你用其它工具类 ...

  9. 彻底了解构建 JSON 字符串的三种方式

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7701856.html 前言:JSON 是轻量级的数据交换格式,很常用,尤其是在使用 Ajax ...

  10. Newtonsoft.Json高级用法DataContractJsonSerializer,JavaScriptSerializer 和 Json.NET即Newtonsoft.Json datatable,dataset,modle,序列化

    原文地址:https://www.cnblogs.com/yanweidie/p/4605212.html Newtonsoft.Json介绍 在做开发的时候,很多数据交换都是以json格式传输的.而 ...

随机推荐

  1. UVA 156 Ananagrams STL应用

    https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&prob ...

  2. webgl创建一个点

  3. mongodb 系统命令总结

    1.连接mongodb mongo ip/dbname -u username -p password #mongo -u admin -p admin 127.0.0.1:27017/pagedb ...

  4. spring--@Autowired @Qualifier @Resource @Value 四者的区别

    @Autowired,@Qualifier,@Resource,和 @Value 是 Spring 框架中用于依赖注入的注解,它们各有特点和用途: @Autowired: @Autowired 注解用 ...

  5. java中native源码查找方法

    以Object的hashCode()方法为例: 1. 下载openjdk源码或从github中查找,这里以github中查找为例:2. GitHub中查找https://github.com/bpup ...

  6. 03-ASIC和FPGA中的时钟结构

    1 ASIC 中时钟的结构 ASIC电路中的时钟的结构.这是一个非常典型的MCU的时钟结构图.它的时钟结构和功能的划分.首先,我们通过外部振荡器发送了一个8MHz的时钟给PLL,经过分分频和倍频产生更 ...

  7. java - 运行可执行文件 (.exe)

    package filerun; import java.io.File; import java.io.IOException; public class RunExe { public stati ...

  8. Redis在Liunx系统下使用

    Redis使用 前言 如何在Linux服务器上部署Redis,版本号如下: Redis版本 5.0.4 服务器版本 Linux CentOS 7.6 64位 下载Redis 进入官网找到下载地址 ht ...

  9. [转帖]JDK8使用G1 垃圾回收器能解决大问题吗?

    https://zhuanlan.zhihu.com/p/458098236 G1 垃圾回收器真的不行吗? 本文想突出两个问题: 解决问题的思路:从最原始的角度去思考,问题的本身是因为缓存数据导致的G ...

  10. [转帖]SQL Server索引的维护 - 索引碎片、填充因子

    https://www.cnblogs.com/kissdodog/archive/2013/06/14/3135412.html 这两个问题都和页密度有关,虽然两者的表现形式在本质上有所区别,但是故 ...