MongoDB对象序列化为JSON [英] MongoDB Object Serialized as JSON

查看:334
本文介绍了MongoDB对象序列化为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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆