Изменение порядка атрибутов json в python flask/marshmallow

Я использую flask, sqlalchemy и зефир, чтобы написать простой REST API. По умолчанию модель всегда сериализуется в json с упорядоченными по алфавиту атрибутами.

Есть ли способ указать порядок атрибутов 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)

возвращается

{
  "x": "MyX", 
  "y": "MyY"
}

но я бы ожидал

{
  "y": "MyY", 
  "x": "MyX"
}

Я в курсе, что json - это неупорядоченный набор и для клиента это не имеет значения. Тем не менее, это больше для целей отладки во время разработки и красивой печати. Поэтому я ожидаю, что структура позволит мне определить порядок атрибутов.


person Johannes Staehlin    schedule 08.12.2015    source источник


Ответы (1)


Да, вы можете установить ordered = True в метакласса схемы. :

class SampleSchema(Schema):
    class Meta:
        ordered = True

Вывод будет упорядочен в соответствии с порядком, в котором поля определены в классе.

person Jeff Widman    schedule 14.12.2015