json序列化python和mongoengine对象混合
json序列化python和mongoengine对象混合,python,json,serialization,deserialization,mongoengine,Python,Json,Serialization,Deserialization,Mongoengine,json.dumps(o)将本机python对象转换为json o.to_json()将对象(例如)转换为json 如何转换混合对象?例如,使用mongoengine对象作为其值的pythondict 有这方面的工具吗?或者我应该创建一个定制的jsonecoder类吗 如果我重写了编码器,我可以创建一个解码器来重建mongoengine对象吗?下面的编码器序列化python\mongoengine对象 import json from mongoengine.base import BaseDo
json.dumps(o)
将本机python对象转换为jsono.to_json()
将对象(例如)转换为json
如何转换混合对象?例如,使用mongoengine对象作为其值的python
dict
有这方面的工具吗?或者我应该创建一个定制的jsonecoder
类吗
如果我重写了编码器,我可以创建一个解码器来重建mongoengine对象吗?下面的编码器序列化python\mongoengine对象
import json
from mongoengine.base import BaseDocument
class MongoengineObjectsJsonEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, BaseDocument):
return o._data
elif isinstance(o, datetime):
return o.isoformat()
else:
return json.JSONEncoder.default(self, o)
注:
- 此编码器不添加任何有关python在何处运行的签名 对象结束,而mongoengine对象开始,所以不能 自动反序列化为python\mongoengine对象, 但它将反序列化为单个python对象
- 我还将
对象序列化添加到ISO 8601格式datetime
return json_utils.dumps(o.to_mongo())
@Ross-您的意思是不是代替特定行return o.\u data
?@Ross-假设上面的注释是,如果default()
返回一个str
而不是dict
,然后在解码过程中,整个对象将保留为字符串,因此您的意思可能是返回o.to_mongo()
@Ross ping关于我上面的问题:)我通过从bson.json_util导入转储和最终返回转储(o)解决了我的问题