MongoEngine 文档 JSON 输出
MongoEngine Document JSON output
我想将 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 格式在子对象中带有 $ 分隔键。基本上我需要它看起来像:
{
"sensorid": "e36fa049-a775-43c3-8879-2544cbe94ab3",
"start": "2012-04-23T18:25:43.511Z",
"end": "2014-04-23T18:25:43.511Z",
"videoref": "http://stuff.com"
}
我可以看到我可以覆盖文档中的 to_json,并使用 self.to_mongo 来获取字典,但我不确定如何自定义 JSON 解析和 return我想要的输出样式。有什么例子/建议吗?
编辑:我意识到我现在可以使用这段代码了:
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。仍然..我猜它有效。
您可以填充字典,然后将其转换为 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)
我想将 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 格式在子对象中带有 $ 分隔键。基本上我需要它看起来像:
{
"sensorid": "e36fa049-a775-43c3-8879-2544cbe94ab3",
"start": "2012-04-23T18:25:43.511Z",
"end": "2014-04-23T18:25:43.511Z",
"videoref": "http://stuff.com"
}
我可以看到我可以覆盖文档中的 to_json,并使用 self.to_mongo 来获取字典,但我不确定如何自定义 JSON 解析和 return我想要的输出样式。有什么例子/建议吗?
编辑:我意识到我现在可以使用这段代码了:
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。仍然..我猜它有效。
您可以填充字典,然后将其转换为 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)