MongoDB对象序列化为JSON [英] MongoDB Object Serialized as JSON
问题描述
我正在尝试在我的HTTP响应中发送JSON编码的MongoDB对象。我也遵循了其他几个类似的问题,但仍然缺少一些东西。抛出异常,但在浏览器中,我收到一个隐藏的< api.views.MongoEncoder对象,位于0x80a0c02c>
响应。我确定这是一件简单的事情,但任何帮助将不胜感激。
功能:
来自django.utils.simplejson import JSONEncoder
从pymongo.objectid import ObjectId
class MongoEncoder(JSONEncoder):
def _iterencode(self,o,markers = none):
if isinstance(o,ObjectId):
returnObjectId(%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 (回应))
我在Python 2.4,pymongo,simplejson。
在较新版本的 simplejson
(和 json
module in Python 2.7)你在你的子类中实现 default
方法:
code>从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)
然后可以使用编码器w ith MongoEncoder()。encode(obj)
或 json.dumps(obj,cls = MongoEncoder)
。 >
I'm attempting to send a JSON encoded MongoDB object back in my HTTP response. I've followed several other similar questions but am still missing something. No exceptions are thrown, but I get a cryptic <api.views.MongoEncoder object at 0x80a0c02c>
response in the browser. I'm sure it's something simple, but any help would be appreciated.
Function:
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 ))
I'm on Python 2.4, pymongo, simplejson.
In newer versions of simplejson
(and the json
module in Python 2.7) you implement the default
method in your subclasses:
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)
You could then use the encoder with MongoEncoder().encode(obj)
or json.dumps(obj, cls=MongoEncoder)
.
这篇关于MongoDB对象序列化为JSON的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!