如何在 flask get 请求中将输出格式化为 Json
How to format out put as Json in flask get request
我对烧瓶很陌生,
基本上我有这个代码 returns 多个值
length= len(data['hits']['hits'])
for i in range(length):
#print(i)
#print (data['hits']['hits'][i]['_source']['message'])
imei=((data['hits']['hits'][i]['_source']['GPS-LOG'].get("IMEI")))
print ("imei: {}".format(imei))
log_time=((data['hits']['hits'][i]['_source']['@timestamp']))
print ("log time: {}".format(log_time))
输出:-
imei: 44444
log time: 2019-09-21T23:31:28.429Z
imei: 55555
log time: 2019-09-21T23:32:02.554Z
imei: 22222
log time: 2019-09-21T23:32:04.561Z
imei: 555555
log time: 2019-09-21T23:32:14.591Z
我在 Flask GET 方法中使用该脚本
@app.route('/battery/<string:get_imei>')
def get_battery(get_imei):
length= len(data['hits']['hits'])
for i in range(length):
imei=(data['hits']['hits'][i]['_source']['GPS-LOG'].get("IMEI"))
#print ("imei: {}".format(imei))
log_time=((data['hits']['hits'][i]['_source']['@timestamp']))
d = datetime.datetime.strptime(log_time,"%Y-%m-%dT%H:%M:%S.%fZ")
new_format = "%Y-%m-%d"
d.strftime(new_format)
print ("log time: {}".format(d))
return jsonify ('{} {}'.format(imei, d))
但这不会 return 多个值,它只有 return 单个值我也不能使它 json 格式像 {'imei': '22222', 'logtime':'2019-09-21'},....
只需将 return jsonify ('{} {}'.format(imei, d))
替换为
return jsonify(imei = imei, logtime = d)
应该会得到您预期的结果。
您可以使用 JSON 数组来完成。首先,您需要通过遍历值列表并将字典附加到列表来将每一对添加到字典中。在此之后 jsonify 列表以获取所有值。
从您的代码块看来,只有第一个值会得到 returned,因为 jsonify 只会对单个值设置 return JSON 格式,无论是列表还是任何其他字典。
#say you have two lists of imei and corresponding logtime
imei=[44444,55555,22222,55555]
logtime=['2019-09-21T23:31:28.429Z','2019-09-21T23:32:02.554Z','2019-09-21T23:32:04.561Z','2019-09-21T23:32:14.591Z']
#to add each entry in JSON format in an array containing two fields, you need to create a temp dict and append it in list
result=[]
# we need to iterate over each element and add it to the dict and then add the dict to list
for i in range(len(imei)):
# it is creating a temporary dict and appending it to the result list (array)
tempDict={'imei':imei[i],'logtime':logtime[i]}
result.append(tempDict)
# after this return the result as JSON
return jsonify(result=result)
您的输出将如下所示
{"result":[{"imei":44444,"logtime":"2019-09-21T23:31:28.429Z"},{"imei":55555,"logtime":"2019-09-21T23:32:02.554Z"},{"imei":22222,"logtime":"2019-09-21T23:32:04.561Z"},{"imei":55555,"logtime":"2019-09-21T23:32:14.591Z"}]}
这是类似的线程:
我对烧瓶很陌生, 基本上我有这个代码 returns 多个值
length= len(data['hits']['hits'])
for i in range(length):
#print(i)
#print (data['hits']['hits'][i]['_source']['message'])
imei=((data['hits']['hits'][i]['_source']['GPS-LOG'].get("IMEI")))
print ("imei: {}".format(imei))
log_time=((data['hits']['hits'][i]['_source']['@timestamp']))
print ("log time: {}".format(log_time))
输出:-
imei: 44444
log time: 2019-09-21T23:31:28.429Z
imei: 55555
log time: 2019-09-21T23:32:02.554Z
imei: 22222
log time: 2019-09-21T23:32:04.561Z
imei: 555555
log time: 2019-09-21T23:32:14.591Z
我在 Flask GET 方法中使用该脚本
@app.route('/battery/<string:get_imei>')
def get_battery(get_imei):
length= len(data['hits']['hits'])
for i in range(length):
imei=(data['hits']['hits'][i]['_source']['GPS-LOG'].get("IMEI"))
#print ("imei: {}".format(imei))
log_time=((data['hits']['hits'][i]['_source']['@timestamp']))
d = datetime.datetime.strptime(log_time,"%Y-%m-%dT%H:%M:%S.%fZ")
new_format = "%Y-%m-%d"
d.strftime(new_format)
print ("log time: {}".format(d))
return jsonify ('{} {}'.format(imei, d))
但这不会 return 多个值,它只有 return 单个值我也不能使它 json 格式像 {'imei': '22222', 'logtime':'2019-09-21'},....
只需将 return jsonify ('{} {}'.format(imei, d))
替换为
return jsonify(imei = imei, logtime = d)
应该会得到您预期的结果。
您可以使用 JSON 数组来完成。首先,您需要通过遍历值列表并将字典附加到列表来将每一对添加到字典中。在此之后 jsonify 列表以获取所有值。 从您的代码块看来,只有第一个值会得到 returned,因为 jsonify 只会对单个值设置 return JSON 格式,无论是列表还是任何其他字典。
#say you have two lists of imei and corresponding logtime
imei=[44444,55555,22222,55555]
logtime=['2019-09-21T23:31:28.429Z','2019-09-21T23:32:02.554Z','2019-09-21T23:32:04.561Z','2019-09-21T23:32:14.591Z']
#to add each entry in JSON format in an array containing two fields, you need to create a temp dict and append it in list
result=[]
# we need to iterate over each element and add it to the dict and then add the dict to list
for i in range(len(imei)):
# it is creating a temporary dict and appending it to the result list (array)
tempDict={'imei':imei[i],'logtime':logtime[i]}
result.append(tempDict)
# after this return the result as JSON
return jsonify(result=result)
您的输出将如下所示
{"result":[{"imei":44444,"logtime":"2019-09-21T23:31:28.429Z"},{"imei":55555,"logtime":"2019-09-21T23:32:02.554Z"},{"imei":22222,"logtime":"2019-09-21T23:32:04.561Z"},{"imei":55555,"logtime":"2019-09-21T23:32:14.591Z"}]}
这是类似的线程: