在一个将数据保存在 MongoDB 中并且还通过(只读)RESTish JSON API 公开一些数据的项目中,处理 Python 对象需要一些额外的工作。序列化和反序列化仅在处理字典或其他简单类型(如字符串)时自动工作。
所以对于 JSON 序列化,我想出了这个:
import json
class Encoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Foo):
return {'bar': obj.bar}
return json.JSONEncoder.fault(self, obj)
class Foo:
def __init__(self, bar):
self.bar = bar
foo = Foo("bar")
encoded = json.dumps(tokens, cls=Encoder)
这工作得很好。但现在我想插入foo
MongoDB:
db.foobars.insert(foo)
显然这不起作用:
Traceback (most recent call last):
...
db.foobars.insert(foo)
File "/usr/local/lib/python2.7/dist-packages/pymongo/collection.py", line 351, in insert
docs = [self.__database._fix_incoming(doc, self) for doc in docs]
这怎么能起作用?