如何在给定带有棉花糖模式的Pymongo游标的情况下获得所需的JSON输出



我的棉花糖输出有问题,JSON结果是:

[
[
{
"data":[
{
"x":"2018-04-03 23:28:31.539895",
"y":15.937
}
],
"sensor":"/sys/bus/w1/devices/28-0000077aae57/w1_slave"
},
],
{
}
]

但我希望它看起来像:

[
{
"data":[
{
"x":"2018-04-03 23:37:40.612334",
"y":16.187
}
],
"sensor":"/sys/bus/w1/devices/28-0000077aae57/w1_slave"
}
]

我有一个get_line函数,它返回一个Pymongo游标:

>>> get_line()
<pymongo.cursor.Cursor object at 0x109162208>

然后我定义我的棉花糖模式:

from marshmallow import Schema, fields
class PointSchema(Schema):
x = fields.String()
y = fields.String()
class LineSchema(Schema):
sensor = fields.String()
data = fields.List(fields.Nested(PointSchema))

我在烧瓶端点中使用以下代码将数据返回给客户端:

result = get_line()
output = []
for line in result:
output.append({'sensor':line['name'], 'data': get_line(line['name'])})
return jsonify(LineSchema(many=True).dump(output))

我还尝试用替换LineSchema

class LineSchema(Schema):
sensor = fields.String()
data = fields.Nested(PointSchema, many=True)

这导致完全相同的JSON输出。我应该如何处理它以实现所需的JSON?我用这个来解决问题,但我想避免为了适应而更改客户端的代码。

好吧,我想明白了。。。

要使用的正确棉花糖模式是:

class LineSchema(Schema):
sensor = fields.String()
data = fields.Nested(PointSchema, many=True)

然而,[ [], {} ]格式的奇怪JSON结果的原因是LineSchema(many=True).dump(output)返回的MarshalObject格式为:

MarshalResult(data=[{'data': [{'y': 15.937, 'x': '2018-04-03 23:28:31.539895'}], 'sensor': '/sys/bus/w1/devices/28-0000077aae57/w1_slave'}], errors={})

因此,返回的正确语法是:

return jsonify(LineSchema(many=True).dump(output).data)

最新更新