MongoDB 对象序列化为 JSON

2023-11-22

我正在尝试在 HTTP 响应中发送回 JSON 编码的 MongoDB 对象。我已经关注了其他几个类似的问题,但仍然遗漏了一些东西。没有抛出异常,但我得到了一个神秘的信息<api.views.MongoEncoder object at 0x80a0c02c>浏览器中的响应。我确信这很简单,但任何帮助将不胜感激。

功能:

from django.utils.simplejson import JSONEncoder
from pymongo.objectid import ObjectId

class MongoEncoder( JSONEncoder ):
     def _iterencode( self, o, markers = None ):
          if isinstance( o, ObjectId ):
               return """ObjectId("%s")""" % str(o)
          else:
               return JSONEncoder._iterencode(self, o, markers)

视图.py:

user = User({
    's_email': request.GET.get('s_email', ''),
    's_password': request.GET.get('s_password', ''),
    's_first_name': request.GET.get('s_first_name', ''),
    's_last_name': request.GET.get('s_last_name', ''),
    'd_birthdate': request.GET.get('d_birthdate', ''),
    's_gender': request.GET.get('s_gender', ''),
    's_city': request.GET.get('s_city', ''),
    's_state': request.GET.get('s_state', ''),
})

response = {
    's_status': 'success',
    'data': user
}
return HttpResponse(MongoEncoder( response ))

我使用的是 Python 2.4、pymongo、simplejson。


在较新版本中simplejson(以及jsonPython 2.7 中的模块)你实现了default子类中的方法:

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)

然后您可以使用编码器MongoEncoder().encode(obj) or json.dumps(obj, cls=MongoEncoder).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB 对象序列化为 JSON 的相关文章

随机推荐