gpt4 book ai didi

python - 如何使用 Marshmallow Schema 给定 Pymongo 游标获取所需的 JSON 输出

转载 作者:行者123 更新时间:2023-12-01 08:29:06 27 4
gpt4 key购买 nike

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

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

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)

关于python - 如何使用 Marshmallow Schema 给定 Pymongo 游标获取所需的 JSON 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54011844/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com