如何使用python将Mongo文档的查询集中的数据转储到.json文件?
我尝试使用django序列化程序,但是没有工作,因为django中的字段访问方式与在mongo中访问它们的方式相同。
for model in models:
json_serializer.serialize(model.objects.all(), indent=2, stream=output_file_mongo)
我也尝试过使用python JSON编码/解码器,
import json
for model in mongo_models:
output_file_mongo.write(json.dumps(model.objects.all()))
我得到了一个例外
File "/usr/lib/python2.7/json/__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
return _iterencode(o, 0)
File "/usr/lib/python2.7/json/encoder.py", line 178, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: [<MongoModelA: MongoModelA object>] is not JSON serializable
答案 0 :(得分:2)
django序列化程序不知道如何处理mongoengine对象,你很可能必须编写自己的json编码器来将它们映射到一个简单的字典:
class MyEncoder(json.JSONEncoder):
def encode_object(self, obj):
return { 'id':unicode(obj.id), 'other_property': obj.other_property }
def default(self, obj):
if hasattr(obj, '__iter__'):
return [ self.encode_object(x) for x in obj ]
else:
return self.encode_object(obj)
然后这样称呼它:
import json
import MyEncoder
json_string = json.dumps(model.objects.all(), cls=MyEncoder)