Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
json序列化python和mongoengine对象混合_Python_Json_Serialization_Deserialization_Mongoengine - Fatal编程技术网

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对象转换为json
o.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对象
  • 我还将
    datetime
    对象序列化添加到ISO 8601格式

这行不通,默认的json编码器无法正确处理mongo的数据类型,因为bson是json的超类型。MongoEngine只使用pymongo(参见bson.json_utils)对单个对象或查询集进行编码,因此您应该在文档中使用pymongo(参见bson.json_utils),例如:
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)解决了我的问题