Flask jsonify eine Liste von Objekten

Ich habe eine Liste von Objekten, die ich jsonifizieren muss. Ich habe mir die Flasche angesehen, aber ich verstehe sie einfach nicht.

Meine Klasse hat mehrere Inst-Variablen, von denen jede eine Zeichenfolge ist:gene_id, gene_symbol, p_value. Was muss ich tun, um diese als JSON serialisierbar zu machen?

Mein naiver Code:

jsonify(eqtls = my_list_of_eqtls)

Ergebnisse in:

TypeError: <__main__.EqtlByGene object at 0x1073ff790> is not JSON serializable

Vermutlich muss ich jsonify sagen, wie man einen serialisiertEqtlByGeneIch kann jedoch kein Beispiel finden, das zeigt, wie eine Instanz einer Klasse serialisiert wird.

Dieser Code funktioniert jetzt (mit vielen Dank an Martijn Pieters!):

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)

Wenn ich es per Curl rufe, bekomme ich:

{
  "eqtls_by_gene": [
    {
      "gene_id": 1, 
      "gene_symbol": "EGFR", 
      "p_value": 0.1
    }, 
    {
      "gene_id": 2, 
      "gene_symbol": "PTEN", 
      "p_value": 0.2
    }
  ]
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage