gpt4 book ai didi

python - 来自flask的响应在React前端收到的Json上有额外的键

转载 作者:行者123 更新时间:2023-12-03 23:01:52 24 4
gpt4 key购买 nike

所以,我有一个或多或少像这样工作的端点:

from flask import Flask, request, jsonify
from flask_cors import CORS

import json
from werkzeug.utils import secure_filename
import os


from mylib import do_stuff

path = os.getcwd()
UPLOAD_FOLDER = os.path.join(path, 'data')
# #load flask
app = Flask(__name__)
CORS(app)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['JSON_AS_ASCII'] = False



print(UPLOAD_FOLDER,flush=True)
@app.route('/upload', methods=['POST'])
def upload():
if request.method == 'POST':
file = request.files['file']
if file:
try:
# Receives a file and saves on the server
filename = secure_filename(file.filename)
file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
print("saving_here {}".format(file_path))
file.save(file_path)

# The result here is a dict of dicts of dicts
# It consists of a dictionary of DataFrames().to_dict()
result = do_stuff(file_path)


response = app.response_class(
response=json.dumps(result ),
status=200,
mimetype='application/json'
)
return response

except Exception as e:
print(e,flush=True)
return "error"

if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port= <PORT>)
这里的主要问题是,在前端有时我会收到一个带有“消息”键的答案,有时我会收到一个没有它的答案(这是我所期望的)。不正确的回应:
"response": {
"data": {
"message": "{\"0\": {\"0\": {\"Item\": \"Desinfetante 5L Max Talco Azul\", \"Qtd\": 2, \"UM\": \"GL\", \"Qtd_UM\": \"5L\", \"Qtd_Ttl\": \"10L\"}, \"1\": {\"Item\": \"Caf\\u00e9 A V\\u00e1cuo Tradicional 500G\", \"Qtd\": 10, \"UM\": \"PC\", \"Qtd_UM\": \"500g\", \"Qtd_Ttl\": NaN}}}"
},
"headers": {
"content-type": [
"application/json"
],
"content-length": [
"227"
],
"access-control-allow-origin": [
"*"
],
"server": [
"Werkzeug/1.0.1 Python/3.8.6"
],
"date": [
"Fri, 11 Dec 2020 13:16:32 GMT"
]
},
"status": 200,
"statusText": "OK"
}
}
预期的响应(仅数据输入):
"response": {
"data": {
"0": {
"0": {
"Pedido": 997,
"Qtd": 5,
"Item": "Água Sanitária 1 Litro",
"Fornecedor": "YYYY"
},
"1": {
"Pedido": 997,
"Qtd": 2,
"Item": "Limpa Vidros Audax Facilita 500ml",
"Fornecedor": "XXXX"
}}}
当我直接从 python 发帖时,如下所示:
import requests
files = {'file': open('<path_to_file>','rb')}
r = requests.post(url="<url>/upload", files = files)
r.json()
Out[12]:
{'0': {'0': {'Item': 'Desinfetante 5L Max Talco Azul',
'Qtd': 2,
'UM': 'GL',
'Qtd_UM': '5L',
'Qtd_Ttl': '10L'},
'1': {'Item': 'Café A Vácuo Tradicional 500G',
'Qtd': 10,
'UM': 'PC',
'Qtd_UM': '500g',
'Qtd_Ttl': nan}}}
r.text
Out[16]: '{"0": {"0": {"Item": "Desinfetante 5L Max Talco Azul", "Qtd": 2, "UM": "GL", "Qtd_UM": "5L", "Qtd_Ttl": "10L"}, "1": {"Item": "Caf\\u00e9 A V\\u00e1cuo Tradicional 500G", "Qtd": 10, "UM": "PC", "Qtd_UM": "500g", "Qtd_Ttl": NaN}}}'
我每次都得到预期的 json 响应,即使使用相同的文件和 header ,也无法重现我在 react 中遇到的问题。
尝试的事情:
  • 返回 json.dumps(result)
  • 返回 jsonify(resutl)
  • 返回响应
  • 最佳答案

    我发现你的回复数据有 \"Qtd_Ttl\": NaN (在您收到的意外响应中)这是无效的字符串格式,并且无法解析为 JSON。
    因此,如果您的数据对于键“Qtd_Ttl”具有有效值,那么您将获得预期结果,如果该值无效,您将获得 message 的响应。 key 。
    这就是您在前端获得奇怪格式的原因。
    我认为您在前端使用 Axios。
    如果您使用的是 Axios,我发现当来自服务器的 JSON 响应无效时会发生这种情况,请使用像 https://jsonlint.com/ 这样的 JSON 验证器。以确保您的 JSON 格式正确。

    关于python - 来自flask的响应在React前端收到的Json上有额外的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65252611/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com