我的棉花糖输出有问题,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)