python对象转字典对象及序列化
字典对象与非字典对象取值方式不一样,非字典对象使用。开头的,所以可以通过判断数据开头是不是。3.1.4、时间、日期类型对象值的获取。3.1.5、自定义对象值的获取。属性,所以要对对象类型做判断。数据结构是最常用的数据结构。对象的内置属性都是以。
·
python对象转字典
1、为什么要对python对象转换为字典
python
字典与json
对象结构相似,json
数据结构是最常用的数据结构
2、python对象转字典及序列化的核心点在哪
python
对象有很多内置属性并不是我们所需要的python
字典对象在序列化的时候,时间字段序列化会报错- 自定义类型数据的序列化
3、实战示例
import logging
import traceback
from datetime import datetime, date
from user.models import GenderEnum
def 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.value
fields[field] = data
except TypeError:
fields[field] = None
logging.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 = 1
woman = 2
更多推荐
所有评论(0)