gpt4 book ai didi

django - MongoDB 对象序列化为 JSON

转载 作者:IT老高 更新时间:2023-10-28 13:24:24 24 4
gpt4 key购买 nike

我正在尝试在我的 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)

views.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(以及 Python 2.7 中的 json 模块)中,您可以在子类中实现 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)json.dumps(obj, cls=MongoEncoder) 一起使用。

关于django - MongoDB 对象序列化为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6255387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com