2015-04-05 66 views
0

我有一个简单的函数,它应该返回JSON。由Flask返回空JSON

@app.route('/storage/experiments', methods=['GET']) 
def get_experiments(): 
    if not request.json: 
     abort(400) 
    experiments = db['experiments'] 
    cursor = experiments.find(request.get_json()) 
    print(dumps(cursor)) 
    resp = Response(response=dumps(cursor), 
    status=200, \ 
    mimetype="application/json") 
    return resp 

打印(转储(光标))示出了

[{"current": "11", "date": "12.12.2001", "_id": {"$oid": "551c7b642349c517f5fa5223"}, "name": "xaxa", "voltage": "34"}]

但返回空方括号[]

+1

同时创造自己的Response对象提供更多的灵活性,你试图简单地返回jsonify(转储(光标))? – SimplicityGuy 2015-04-05 03:17:08

+0

是的,我试着jsonify(转储(光标))返回500错误, jsonify(list(cursor))return {}, jsonify(cursor)return {}。 我没有更多的变体 – Alexander1 2015-04-05 12:21:02

+0

只是一个快速猜测,但它是否工作,如果您删除/注释掉打印语句? – 2015-04-05 12:41:45

回答

0

我想这是因为你的数据库光标(我不知道你使用的是什么数据库框架,sqlalchemy?)指向你想返回数据集的末尾,因为你的print() -statement已经在迭代超过它。它应该与此代码时,你只是注释掉print()声明的工作,因为我看不到这个代码的任何其他错误:

@app.route('/storage/experiments', methods=['GET']) 
def get_experiments(): 
    if not request.json: 
     abort(400) 
    experiments = db['experiments'] 
    cursor = experiments.find(request.get_json()) 
    #print(dumps(cursor)) 
    resp = Response(response=dumps(cursor), 
    status=200, \ 
    mimetype="application/json") 
    return resp 
+0

谢谢。它正在工作。如此愚蠢的错误( – Alexander1 2015-04-05 13:00:58

0

可以使用jsonify函数从烧瓶模块。

编辑 Chrisitian是对的我没有注意到你正在使用一个列表。无论如何,这里是我写的一个装饰器,以解决这个问题:Json decorator。希望这可以帮助。

+0

'jsonify'只适用于字典,他试图序列化一个列表 – 2015-04-05 12:38:08