给您
EqltByGene一个额外的方法来返回字典:
class EqltByGene(object): # def serialize(self): return { 'gene_id': self.gene_id, 'gene_symbol': self.gene_symbol, 'p_value': self.p_value, }然后使用列表推导将您的对象列表转换为可序列化值的列表:
jsonify(eqtls=[e.serialize() for e in my_list_of_eqtls])
另一种方法是为该
json.dumps()函数编写一个钩子函数,但是由于您的结构很简单,因此列表理解和自定义方法更简单。
您也可以冒险和继承类别
flask.json.JSONEnprer;
给它一个
default()将
EqltByGene()实例转换为可序列化值的方法:
from flask.json import JSonEnprerclass MyJSonEnprer(JSONEnprer): def default(self, obj): if isinstance(obj, EqltByGene): return { 'gene_id': obj.gene_id, 'gene_symbol': obj.gene_symbol, 'p_value': obj.p_value, } return super(MyJSONEnprer, self).default(obj)并将其分配给
app.json_enprer属性:
app = Flask(__name__)app.json_enprer = MyJSONEnprer
并将您的列表直接传递给
jsonify():
return jsonify(my_list_of_eqtls)
您还可以在Marshmallow项目中找到一个更全面,更灵活的项目,该项目用于将对象序列化和反序列化为易于适合JSON和其他此类格式的Python原语;例如:
from marshmallow import Schema, fieldsclass EqltByGeneSchema(Schema): gene_id = fields.Integer() gene_symbol = fields.String() p_value = fields.Float()
然后使用
jsonify(eqlts=EqltByGeneSchema().dump(my_list_of_eqtls, many=True)
产生JSON输出。可以使用相同的架构来验证传入的JSON数据,并(使用适当的额外方法)可以用于
EqltByGene再次产生实例。



