2015-12-08 1 views
1

J'utilise flask, sqlalchemy et marshmallow pour écrire une API REST simple. Par défaut, le modèle est toujours sérialisé dans un json avec des attributs ordonnés alphabétiques.Modification de l'ordre des attributs json dans un flacon python/guimauve

Existe-t-il un moyen de spécifier l'ordre des attributs json avec marshmallow?

Par exemple:

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) 

retours

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

mais j'attendre

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

Je suis conscient que JSON est un ensemble non ordonné et il n'a pas d'importance pour le client. Cependant, c'est plus pour le but de débogage pendant le développement et la jolie impression. Donc je m'attendrais à un cadre pour me laisser définir l'ordre des attributs.

Répondre

3

Oui, vous pouvez définir ordered = True dans le Schema's Class Meta:

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

La sortie sera commandée en fonction de l'ordre que les champs sont définis dans la classe.