如何 return JSON Flask 中的对象(字典列表)API
How to return JSON objects (List of Dictionaries) in Flask API
这里是新手,坚持将一些对象从 JSON 返回到我的 Flask API。
我有一个名为数据的字典列表,您将在下面的代码中看到。我需要检查 status_id 是否在数据中。如果是,我必须显示该用户的名称。我如何从列表中访问字典?还是我的 json 无效?我确实使用了 linter 来检查它并通过了 JSON 测试。我收到错误:字符串索引必须是整数。这让我相信,因为它是一个列表,所以我需要整数作为索引。
任何正确方向的帮助都会很棒。
这是我的代码:
@app.route("/status/<status_id>", methods=['GET'])
def get_status(status_id):
data = [{
"id": 5,
"name": "Meghan"
},
{
"id": 6,
"name": "Julia"
}
]
data_dump = json.dumps(data, indent=4)
if status_id in data_dump:
#find that status id and name and return it
return data_dump[status_id]['name']
else:
return "Not Found in Dictionary"
对我来说,您似乎想要 return id == status_id
所在对象的名称。那正确吗?比起您不必将其转储到 json。您可以检查 status_id
是否存在于列表中:
len(list(filter(lambda x: x['id'] == status_id, data))) == 1
解释:
list(filter(lambda x: x['id'] == status_id, data))
这会过滤您的词典列表,使其仅包含具有匹配 ID 的词典。
len(...) == 1
这会检查是否只有一个对象具有此 ID。如果你想 return 正是那个字典的名字,你可以这样写:
matching_dict = list(filter(lambda x: x['id'] == status_id, data))
if len(matching_dict) == 1:
return matching_dict[0]['name']
如果您想要 return json(作为字符串)。然后你必须调用 json.dumps()
就像 json.dumps(matching_dict[0])
取决于你想做什么。
编辑:所以将所有内容放在一起看起来像这样:
@app.route("/status/<status_id>", methods=['GET'])
def get_status(status_id):
data = [{
"id": 5,
"name": "Meghan"
},
{
"id": 6,
"name": "Julia"
}
]
matching_dict = list(filter(lambda x: x['id'] == status_id, data))
if len(matching_dict) == 1:
return json.dumps(matching_dict[0])
else:
return "Found zero or more than one in Dictionary"
请求:GET /status/5
响应:{"id":5, "name": "Meghan"}
见下文。 get_status
函数的简化版本。
注意HTTP状态码(200比404)
@app.route("/status/<status_id>", methods=['GET'])
def get_status(status_id):
data = [{
"id": 5,
"name": "Meghan"
},
{
"id": 6,
"name": "Julia"
}
]
name = None
for entry in data:
if entry['id'] == status_id:
name = entry['name']
break
if name is not None:
print('The name for status_id {} is {}'.format(status_id,name))
return name, 200
# or, if you want to return both use Flask jsonify and send a dict
# see http://flask.pocoo.org/docs/1.0/api/#flask.json.jsonify
else:
print('Can not find a name for status id {}'.format(status_id))
return "Not Found in Dictionary", 404
这里是新手,坚持将一些对象从 JSON 返回到我的 Flask API。
我有一个名为数据的字典列表,您将在下面的代码中看到。我需要检查 status_id 是否在数据中。如果是,我必须显示该用户的名称。我如何从列表中访问字典?还是我的 json 无效?我确实使用了 linter 来检查它并通过了 JSON 测试。我收到错误:字符串索引必须是整数。这让我相信,因为它是一个列表,所以我需要整数作为索引。
任何正确方向的帮助都会很棒。
这是我的代码:
@app.route("/status/<status_id>", methods=['GET'])
def get_status(status_id):
data = [{
"id": 5,
"name": "Meghan"
},
{
"id": 6,
"name": "Julia"
}
]
data_dump = json.dumps(data, indent=4)
if status_id in data_dump:
#find that status id and name and return it
return data_dump[status_id]['name']
else:
return "Not Found in Dictionary"
对我来说,您似乎想要 return id == status_id
所在对象的名称。那正确吗?比起您不必将其转储到 json。您可以检查 status_id
是否存在于列表中:
len(list(filter(lambda x: x['id'] == status_id, data))) == 1
解释:
list(filter(lambda x: x['id'] == status_id, data))
这会过滤您的词典列表,使其仅包含具有匹配 ID 的词典。
len(...) == 1
这会检查是否只有一个对象具有此 ID。如果你想 return 正是那个字典的名字,你可以这样写:
matching_dict = list(filter(lambda x: x['id'] == status_id, data))
if len(matching_dict) == 1:
return matching_dict[0]['name']
如果您想要 return json(作为字符串)。然后你必须调用 json.dumps()
就像 json.dumps(matching_dict[0])
取决于你想做什么。
编辑:所以将所有内容放在一起看起来像这样:
@app.route("/status/<status_id>", methods=['GET'])
def get_status(status_id):
data = [{
"id": 5,
"name": "Meghan"
},
{
"id": 6,
"name": "Julia"
}
]
matching_dict = list(filter(lambda x: x['id'] == status_id, data))
if len(matching_dict) == 1:
return json.dumps(matching_dict[0])
else:
return "Found zero or more than one in Dictionary"
请求:GET /status/5
响应:{"id":5, "name": "Meghan"}
见下文。 get_status
函数的简化版本。
注意HTTP状态码(200比404)
@app.route("/status/<status_id>", methods=['GET'])
def get_status(status_id):
data = [{
"id": 5,
"name": "Meghan"
},
{
"id": 6,
"name": "Julia"
}
]
name = None
for entry in data:
if entry['id'] == status_id:
name = entry['name']
break
if name is not None:
print('The name for status_id {} is {}'.format(status_id,name))
return name, 200
# or, if you want to return both use Flask jsonify and send a dict
# see http://flask.pocoo.org/docs/1.0/api/#flask.json.jsonify
else:
print('Can not find a name for status id {}'.format(status_id))
return "Not Found in Dictionary", 404