从Flask返回一个字典列表到Ajax / Jquery

时间:2016-08-09 23:41:13

标签: jquery ajax flask

我希望Flask返回一个列表的词典,其中每个词典都有以下结构:

{'category': 'Spas/beauty/personal care', 'location': [48.84014, 2.26351], 'id': '161608194188848', 'zip': 'Tel:0777034152', 'state': '', '_id': ObjectId('57a9a8582daf236574089796'), 'street': '166 avenue de Versailles', 'category_list': [{'name': 'Aesthetics', 'id': '146053955462002'}], 'name': 'The bar à sourcils', 'city': 'Paris', 'country': 'France'}

我尝试了很多方法,我遇到的主要错误信息是:

  • 'dict' object has no attribute 'serialize':当我尝试序列化列表中的词典时。
  • ObjectId(...) is not JSON serializable:当我尝试使用JSONIFY或json.dumps()时。

这是烧瓶代码:

@app.route('/getme', methods=['POST'])
def receiveData():
    curPos = request.json # curPos = {'lat': , 'lng': }
    client = MongoClient()
    db = client.places
    fbplacesCollection = db.fbplaces
    query = {'location': {'$geoWithin': {'$center': [[curPos['lat'], curPos['lng']], 0.089992801]}}}
    result = list(fbplacesCollection.find(query))
    return ' ' # I want to send the list called result 

这是Ajax / Jquery代码:

$.ajax({
      method: "POST",
      url: "getme",
      contentType:"application/json",
      dataType:"json",
      data: JSON.stringify(toSend)
    })
      .done(function( msg ) {
        // do s.th with the received msg
        console.log(msg);     
      });

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

将以下内容添加到烧瓶代码中:

from bson.json_util import dumps
...
dumps(result)
return (result)

注意:由于MongoDB将文档存储在 BSON 文件中, json.dumps()将无效。 json_util - 使用Python的json模块和BSON文档的工具 - 将完成此类工作。见http://api.mongodb.com/python/current/api/bson/json_util.html

干杯!