【发布时间】:2014-02-20 02:24:03
【问题描述】:
我有一个需要 jsonify 的对象列表。我查看了烧瓶 jsonify 文档,但我就是不明白。
我的班级有几个 inst-var,每个都是一个字符串:gene_id、gene_symbol、p_value。我需要做什么才能将其序列化为 JSON?
我的幼稚代码:
jsonify(eqtls = my_list_of_eqtls)
结果:
TypeError: <__main__.EqtlByGene object at 0x1073ff790> is not JSON serializable
大概我必须告诉 jsonify 如何序列化 EqtlByGene,但我找不到显示如何序列化类实例的示例。
我一直在尝试按照下面显示的一些建议来创建我自己的 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")
【问题讨论】:
-
JSON 无法序列化类实例。但是,您决定序列化您的类,该序列化将不是规范的 JSON,并且在反序列化您的 JSON 时需要另一方的显式支持。
标签: python json serialization flask