从MongoDB读取'GET'方法,TypeError:字符串索引必须是整数,而不是str

从MongoDB读取'GET'方法,TypeError:字符串索引必须是整数,而不是str,mongodb,python-2.7,Mongodb,Python 2.7,文件: 代码: 但是发生类型错误:字符串索引必须是整数,而不是str 对于预期的结果,我应该怎么做?您需要修复以下两行: json_orders = dumps(orders) target_order_ID = [target_order_ID for target_order_ID in json_orders if target_order_ID["id"] == order_ID] 第一次转储生成一个字符串,因此json_orders是一个字符串。当您在列表理解中遍历它时,您正在遍历字

文件:

代码:

但是发生类型错误:字符串索引必须是整数,而不是str
对于预期的结果,我应该怎么做?

您需要修复以下两行:

json_orders = dumps(orders)
target_order_ID = [target_order_ID for target_order_ID in json_orders if target_order_ID["id"] == order_ID]
第一次转储生成一个字符串,因此json_orders是一个字符串。当您在列表理解中遍历它时,您正在遍历字符串的字符,这些字符本身就是一个字符串。然后尝试使用[id]索引这些字符串,这是错误的来源

还要注意,第二行还有另一个错误。您正在为target_ID分配一个列表,当它出现时,您只需要列表中的一个元素。您已经过度使用了target\u order\u ID这个名称,因此稍微清理一下可能也会有所帮助

from flask import Flask, jsonify, make_response, request
import pymongo
from bson.json_util import dumps

connection = pymongo.MongoClient("localhost", 27017)
db = connection.RESTbucks
collection  = db.order


app = Flask(__name__)


@app.route('/order/<int:order_ID>', methods=['GET'])
def get_order(order_ID):
    orders = collection.find()
    json_orders = dumps(orders)
    target_order_ID = [target_order_ID for target_order_ID in json_orders if target_order_ID["id"] == order_ID]
    if target_order_ID == order_ID:
        return jsonify({'order': json_orders[order_ID]})
    else:
        return make_response(jsonify({'error': 'Not found'}), 404)
"{ "_id" : ObjectId("553221c56d88889eb26f6557"), "id" : 1, "name" : "Americano", "quantity" : 3, "milk" : "No", "size" : "short" }"
json_orders = dumps(orders)
target_order_ID = [target_order_ID for target_order_ID in json_orders if target_order_ID["id"] == order_ID]