Python flask的响应在React front接收到的Json上有额外的键

Python flask的响应在React front接收到的Json上有额外的键,python,reactjs,flask,frontend,backend,Python,Reactjs,Flask,Frontend,Backend,因此,我有一个端点,其工作原理大致如下: 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') #

因此,我有一个端点,其工作原理大致如下:

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>)
预期响应(仅数据输入):

当我直接从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}}}'
导入请求
文件={'file':打开('','rb')}
r=requests.post(url=“/upload”,files=files)
r、 json()
出[12]:
{'0':{'0':{'Item':'Desinfetante 5L Max Talco Azul',
“Qtd”:2,
“嗯”:“GL”,
“Qtd_UM”:“5L”,
“Qtd_Ttl”:“10L”},
'1':{'Item':'CaféA Vácuo Tradicial 500G',
“Qtd”:10,
"嗯":"个人电脑",,
“Qtd_UM”:“500g”,
“Qtd_Ttl”:nan}
r、 正文
出[16]:{“0”:{“0”:{“项目”:“设计”5L Max Talco Azul,“Qtd”:2,“嗯”:“GL”,“Qtd_UM”:“5L”,“Qtd_Ttl”:“10L”},“1”:{“项目”:“Caf\\u00e9 V\\u00e1cuo传统500G”,“Qtd”:10,“嗯”:“PC”,“Qtd_UM”:“500G”,“Qtd_Ttl”:“NaN}”
我每次都会得到预期的json响应,并且无法重新创建react的问题,即使使用相同的文件和头

尝试过的事情:

  • 返回json.dumps(结果)
  • 返回jsonify(Resultl)
  • 返回响应

我发现您的响应数据有
\'Qtd\u Ttl\':NaN
(在您收到的意外响应中),该字符串格式无效,无法解析为JSON

因此,如果您的数据具有键“Qtd_Ttl”的有效值,则您将获得预期结果,如果该值无效,您将获得带有
消息
键的响应

这就是为什么你的前端会出现奇怪的格式。 我认为您在前端使用的是Axios。
如果您使用的是Axios,我发现当来自服务器的JSON响应无效时会发生这种情况,请使用JSON验证程序来确保您的JSON格式正确。

您确定您的
do\u stuff(file\u path)
做的事情正确吗?是的。。。每次它都会返回一个由字典组成的列表。这里的主要问题是,前端接收到的答案与python应用程序不同。您使用什么代码在前端获取数据?在发送答案之前进行了填充,现在一切正常。非常感谢你!
"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"
        }}}
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}}}'