【发布时间】:2014-10-15 22:49:09
【问题描述】:
我可能在做一些愚蠢的事情,但我在 mongo 中有一个类似于以下内容的序列化程序:
from json import JSONEncoder
from pymongo.objectid import ObjectId
class MongoEncoder(JSONEncoder):
def default(self, obj, **kwargs):
if isinstance(obj, ObjectId):
return str(obj)
else:
return JSONEncoder.default(obj, **kwargs)
现在如果我这样做:
obj = Model.objects().first()
json.dumps(obj, cls=MongoEncoder)
我收到一个错误:
TypeError: unbound method default() must be called with JSONEncoder instance as first argument (got Allocation instance instead)
稍微挖掘了一下,发现在回调 MongoEncoder 类的过程中,第一个传递给默认值的“obj”是 obj 本身,而不是 obj 的组件。在过去的某个时候,我有这个工作,但我认为它会智能地迭代传递给 json.dumps 命令的 obj 的组件(即,传递给 MongoEncoder.default 的所有内容都是原始 obj 的字段,不是 obj 本身。
我错过了什么吗?
【问题讨论】:
标签: python json mongodb serialization mongoengine