我有一个对象列表需要转化为JSON格式。我查看了flask的jsonify文档,但是我还是无法理解。
我的类有几个实例变量,每个变量都是字符串:gene_id
、gene_symbol
、p_value
。我需要做什么才能将其序列化为JSON格式?
我的naive代码:
jsonify(eqtls = my_list_of_eqtls)
结果为:
TypeError: <__main__.EqtlByGene object at 0x1073ff790> is not JSON serializable
我需要告诉jsonify如何序列化一个,但我找不到一个展示如何序列化类实例的例子。
我一直在尝试按照下面给出的建议创建自己的JSONEncoder子类。现在我的代码是:
class EqtlByGene(Resource):
def __init__(self, gene_id, gene_symbol, p_value):
self.gene_id = gene_id
self.gene_symbol = gene_symbol
self.p_value = p_value
class EqtlJSONEncoder(JSONEncoder):
def default(self, obj):
if isinstance(obj, EqtlByGene):
return {
'gene_id' : obj.gene_id,
'gene_symbol' : obj.gene_symbol,
'p_value' : obj.p_value
}
return super(EqtlJSONEncoder, self).default(obj)
class EqtlByGeneList(Resource):
def get(self):
eqtl1 = EqtlByGene(1, 'EGFR', 0.1)
eqtl2 = EqtlByGene(2, 'PTEN', 0.2)
eqtls = [eqtl1, eqtl2]
return jsonify(eqtls_by_gene = eqtls)
api.add_resource(EqtlByGeneList, '/eqtl/eqtlsbygene')
app.json_encoder(EqtlJSONEncoder)
if __name__ == '__main__':
app.run(debug=True)
当我尝试使用curl访问它时,我收到以下信息:
TypeError(repr(o) + " is not JSON serializable")