MongoEngine文档JSON输出

时间:2015-06-16 13:36:59

标签: python json mongoengine bson

我想将MongoEngine文档作为JSON对象输出,以通过HTTP / Flask发送。我明白我可以这样做:

doc = VideoRecord.objects.get(id = _id)
return doc.to_json()

但是这个输出存在一些问题,如下所示:

{"_id": {"$oid": "558021e7b5540f001225c1c6"}, "start": {"$date": 1335205543511}, "end": {"$date": 1398277543511}, "videoref": "http://stuff.com", "sensorid": {"$uuid": "e36fa049a77543c388792544cbe94ab3"}}

首先,我想要一个ISO格式的DateTime字段,其次我不希望这个嵌套的BSON格式在子对象中带有$ delimited键。基本上我需要它看起来像:

{
"sensorid": "e36fa049-a775-43c3-8879-2544cbe94ab3",
"start": "2012-04-23T18:25:43.511Z",
"end": "2014-04-23T18:25:43.511Z",
"videoref": "http://stuff.com"
}

我可以看到我可以覆盖Document中的to_json,并使用self.to_mongo来获取字典,但我不确定如何自定义JSON解析并返回我想要的输出样式。任何例子/指针?

编辑:我意识到我现在可以使用此代码:

def to_json(self):
    rv = '{ "id": "' + str(self.id) + '", "sensorid": "' + str(self.sensorid) + '"'
    if self.start is not None:
        rv += ', "start": "' + self.start.isoformat() + '"'

    if self.end is not None:
        rv += ', "end": "' + self.end.isoformat() + '"'

    rv += '}'

    return rv

但坦率地说,我希望能少一点DIY。还是..我觉得它很有用。

1 个答案:

答案 0 :(得分:2)

您可以填充字典,然后将其转换为json:

,而不是连接字符串
import json
...
def to_json(self):
    d = {
           "id": str(self.id),
           "sensorid": str(self.sensorid)
        }
    if not self.start is None:
        d['start'] = self.start.isoformat()
    if not self.end is None:
        d['end'] = self.end.isoformat()

    return json.dumps(d)