在 python flask/marshmallow 中更改 json 属性顺序
Changing json attributes order in python flask/marshmallow
我正在使用 flask、sqlalchemy 和 marshmallow 编写一个简单的 REST API。默认情况下,模型始终序列化为 json,具有按字母顺序排列的属性。
有没有办法用 marshmallow 指定 json 属性的顺序?
例如:
class Sample(db.Model):
y = db.Column(db.String(256), primary_key=True)
x = db.Column(db.String(256))
def __init__(self, y, x):
self.x = x
self.y = y
class SampleSchema(Schema):
y = fields.Str()
x = fields.Str()
@app.route('/sample')
def get_sample():
dummy = Sample("MyY", "MyX")
logger.info(dummy)
schema = SampleSchema()
return jsonify(schema.dump(dummy).data)
returns
{
"x": "MyX",
"y": "MyY"
}
但我希望
{
"y": "MyY",
"x": "MyX"
}
我知道 json 是一个无序集,对客户来说无关紧要。但是,它更多地用于开发和漂亮打印期间的调试目的。所以我希望有一个框架可以让我定义属性的顺序。
是的,您可以在 Schema's Class Meta:
中设置 ordered = True
class SampleSchema(Schema):
class Meta:
ordered = True
输出将根据字段在 class 中定义的顺序排序。
我正在使用 flask、sqlalchemy 和 marshmallow 编写一个简单的 REST API。默认情况下,模型始终序列化为 json,具有按字母顺序排列的属性。
有没有办法用 marshmallow 指定 json 属性的顺序?
例如:
class Sample(db.Model):
y = db.Column(db.String(256), primary_key=True)
x = db.Column(db.String(256))
def __init__(self, y, x):
self.x = x
self.y = y
class SampleSchema(Schema):
y = fields.Str()
x = fields.Str()
@app.route('/sample')
def get_sample():
dummy = Sample("MyY", "MyX")
logger.info(dummy)
schema = SampleSchema()
return jsonify(schema.dump(dummy).data)
returns
{
"x": "MyX",
"y": "MyY"
}
但我希望
{
"y": "MyY",
"x": "MyX"
}
我知道 json 是一个无序集,对客户来说无关紧要。但是,它更多地用于开发和漂亮打印期间的调试目的。所以我希望有一个框架可以让我定义属性的顺序。
是的,您可以在 Schema's Class Meta:
中设置ordered = True
class SampleSchema(Schema):
class Meta:
ordered = True
输出将根据字段在 class 中定义的顺序排序。