python对象转字典对象及序列化

python对象转字典

1、为什么要对python对象转换为字典

python字典与json对象结构相似,json数据结构是最常用的数据结构

2、python对象转字典及序列化的核心点在哪

  • python对象有很多内置属性并不是我们所需要的
  • python字典对象在序列化的时候,时间字段序列化会报错
  • 自定义类型数据的序列化

3、实战示例

import logging
import traceback
from datetime import datetime, datefrom user.models import GenderEnumdef to_json(obj):fields = {}if isinstance(obj, dict):attributes = obj.keys()else:attributes = [x for x in obj.__dict__ if not x.startswith('_')]for field in attributes:if isinstance(obj, dict):data = obj.get(field)else:data = obj.__getattribute__(field)try:if isinstance(data, datetime):data = data.strftime('%Y-%m-%d %H:%M:%S')if isinstance(data, date):data = data.strftime('%Y-%m-%d')if isinstance(data, GenderEnum):data = data.valuefields[field] = dataexcept TypeError:fields[field] = Nonelogging.error(traceback.format_exc())return fields

3.1、注意事项

3.1.1、python对象的内置属性都是以_开头的,所以可以通过判断数据开头是不是_来过滤内置属性

attributes = [x for x in obj.__dict__ if not x.startswith('_')]

3.1.2、python字典对象没有__dict__属性,所以要对对象类型做判断

if isinstance(obj, dict):attributes = obj.keys()
else:attributes = [x for x in obj.__dict__ if not x.startswith('_')]

3.1.3、python字典对象与非字典对象取值方式不一样,非字典对象使用obj.__getattribute__(field),字典对象使用data = obj.get(field)方式取值

if isinstance(obj, dict):data = obj.get(field)
else:data = obj.__getattribute__(field)

3.1.4、时间、日期类型对象值的获取

if isinstance(data, datetime):data = data.strftime('%Y-%m-%d %H:%M:%S')
if isinstance(data, date):data = data.strftime('%Y-%m-%d')

3.1.5、自定义对象值的获取

if isinstance(data, GenderEnum):data = data.value

自定义类型GenderEnum

class GenderEnum(enum.Enum):man = 1woman = 2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/857608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

grafana 通过自定义API获取数据

一、安装插件 安装infinity插件 二、配置数据源 三、配置图表 1、数据 这边提供一个go的demo package mainimport ("math/rand""net/http""time""github.com/gin-gonic/gin" )func main() {router : gin.Default()rand.Seed(time.…

【SQL】UNION 与 UNION ALL 的区别

在 SQL 中,UNION 和 UNION ALL 都用于将两个或多个结果集合并为一个结果集,但它们在处理重复数据方面有显著区别。以下是它们的详细区别: 1. UNION UNION 操作符用于合并两个或多个 SELECT 语句的结果集,并自动去除结果集中重复…

c# 学习笔记 PropertyChangedEventHandler、 =>、DependencyObject、DataContext

在C#中,PropertyChangedEventHandler 和 PropertyChanged 常常与 INotifyPropertyChanged 接口一起使用,这是实现数据绑定和通知机制的关键部分,尤其在WPF (Windows Presentation Foundation) 或其他支持数据绑定的UI框架中。 PropertyChang…

怎样去掉卷子上的答案并打印

当面对试卷答案的问题时,一个高效而简单的方法是利用图片编辑软件中的“消除笔”功能。这种方法要求我们首先将试卷拍摄成照片,然后利用该功能轻松擦除答案。尽管这一方法可能需要些许时间和耐心,但它确实为我们提供了一个可行的解决途径。 然…

【2024.6.22】今日科技时事:科技前沿大事件

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

如何避免vue的url中使用hash符号?

目录 1. 安装 Vue Router 2. 配置 Vue Router 使用 history 模式 3. 更新 main.js 4. 配置服务器以支持 history 模式(此处需要仔细测试) a. Nginx 配置 b. Apache 配置 5. 部署并测试 总结 在 Vue.js 项目中,避免 URL 中出现 # 符号的…

docker-compose功能、操作

文章目录 前言主要功能基本用法 前言 docker-compose 是一个用于定义和运行多容器 Docker 应用的工具。它使用一个 YAML 文件(通常命名为 docker-compose.yml)来配置应用的服务、网络和卷等属性。通过 docker-compose,你可以利用一个单一的命…

YAML 入门教程

YAML 是 "YAML Aint a Markup Language"(YAML 不是一种标记语言)的递归缩写,是一种人类可读的完整的数据序列化语言。YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言&#xf…

宝塔部署GeoServer教程

前期准备:下载geoserver 直接用我上传的geoserver或者是去官网下https://geoserver.org/release/stable/ 压缩包的geoserver版本是:2.25.1 jdk要求版本是:jdk11以上 tomcat版本:可选8或者9,建议用9 windows选择Window…

linux./xxx.py :Command not found

从windows传入linux系统中的py文件,在运行时出现了如标题所示的错误 第一行#!/bin/python3 但是却无法使用./xxx.py运行,通过一番调试,发现 windows的换行符与linux的换行符不一致导致了错误的发生 如何解决这个问题,使用dos2unix…

视频监控统一管理平台LntonCVS安防视频监控系统视频汇聚方案

LntonCVS平台最初被设计为一个以视频汇聚为核心的平台。那么,什么是视频汇聚平台,以及它是如何处理视频资源的呢?简单来说,视频汇聚平台能够从不同的视频源(如直播和点播)收集、整合和展示视频内容。以下是…

春天,快速恢复能量的10件小事(不妨试试)

春天快速恢复能量的十件小事,不妨试试随着天气回暖,万物都在恢复生机。 只是很多朋友感慨自己似乎总有些能量不足,没干什么重活累活,但觉得浑身疲乏,精神状态很低迷,不仅容易走神,而且记忆力也在…

Docker可视化web工具

docker run --restart always --name docker.ui -d -v /var/run/docker.sock:/var/run/docker.sock -p 8989:8999 joinsunsoft/docker.ui #--restart always:重启策略,只要关闭就会重启 http://192.168.10.51:8989 账号:ginghan 密码&#xf…

IOS Swift 从入门到精通: 函数,参数和异常

文章目录 编写函数接受参数返回值参数标签省略参数标签默认参数可变参数函数编写抛出函数运行异常函数输入输出参数总结 编写函数 函数让我们可以重复使用代码,这意味着我们可以编写一个函数来做一些有趣的事情,然后从很多地方运行该函数。重复代码通常…

Java匿名类

Java 匿名类是一种特殊的内部类,它没有名字,并且通常用来简化代码实现,尤其是在实现接口或者抽象类的实例时。匿名类可以在实例化时定义其行为,而不需要创建单独的类文件。 匿名类的特点 没有名字:匿名类是没有名字的…

写代码必用字体

下载链接 字体下载链接 使用情况/截图 软件:DEV-CPP 系统:Win10专业版 自带判等、大于、小于等符号的专属字体

计算机组成原理网课笔记2

存储系统基本概念 CPU:运算器控制器。​ 作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。 ​ 主存储器的基本组成 半导体元件的原理 在电容上面的金属板加一个5V的高电平,产生电压差,电容里面的电荷就会开…

计算机系统基础实训五—CacheLab实验

实验目的与要求 1、让学生更好地应用程序性能的优化方法; 2、让学生更好地理解存储器层次结构在程序运行过程中所起的重要作用; 3、让学生更好地理解高速缓存对程序性能的影响; 实验原理与内容 本实验将帮助您了解缓存对C程序性能的影响…

带你学习Mybatis之MappedStatement

mybatis之MappedStatement MappedStatement是保存mapper.xml的一个节点(select|insert|delete|update),包括许多配置的sql、sql的id、缓存信息、resultMap、parameterType、resultType、languageDriver等重要配置内容 public final class MappedStatement { privat…

【面向对象】复习(二)

内存对齐 class A{ static int a; } int main(){ A obj; cout<<sizeof(obj); } 在你的代码中&#xff0c;class A 包含一个静态成员变量 a。静态成员变量不属于类的任何特定实例&#xff0c;而是属于整个类。因此&#xff0c;在计算类的实例大小时&#xff0c;静态…