在python flask / marshmallow中更改json属性顺序

时间:2015-12-08 20:49:15

标签: 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)

返回

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

但我希望

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

我知道json是一个无序集合,对客户端来说无关紧要。但是,在开发和漂亮的打印过程中,它更适用于调试目的。所以我希望有一个框架让我定义属性的顺序。

1 个答案:

答案 0 :(得分:3)

是的,您可以在Schema's Class Meta

中设置JFrame frame = new JFrame("ORDERING FOOD APPLICATION"); JPanel panel = new JPanel(); ImageIcon icon = new ImageIcon("hamburger.jpg"); frame.setIconImage(icon.getImage()); try { frame.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("fd12.jpg"))))); } catch (IOException e) { e.printStackTrace(); } frame.setLayout(new GridBagLayout()); JButton btn = new JButton("Click me"); frame.add(btn); frame.pack(); frame.setVisible(true);
JLabel

将根据在类中定义字段的顺序对输出进行排序。