Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python flask restfull返回json文件?_Python_Json_Flask_Flask Restful - Fatal编程技术网

如何使用python flask restfull返回json文件?

如何使用python flask restfull返回json文件?,python,json,flask,flask-restful,Python,Json,Flask,Flask Restful,我试图用flask restfull和send_file在json对象中发送两个文件 当我尝试访问客户端上的json对象时,出现以下错误: TypeError: Object of type 'Response' is not JSON serializable 这是我在烧瓶应用程序中所做的: class Download(Resource): def get(self): try: return {"file1" : send_file('up

我试图用flask restfull和send_file在json对象中发送两个文件

当我尝试访问客户端上的json对象时,出现以下错误:

TypeError: Object of type 'Response' is not JSON serializable
这是我在烧瓶应用程序中所做的:

class Download(Resource):
    def get(self):
        try:
            return {"file1" : send_file('uploads/kode.png'), "file2" : send_file('uploads/kode.png')}, 200
        except:
            return {"message" : "File not found!"}, 404

如何返回文件的json

我觉得你的答案太宽了。但是,要返回json对象,请导入json及其object.json()

或者您可以从flask导入json库

from flask import jsonify
def myMethod():
    ....
    response = jsonify(data)
    response.status_code = 200 # or 400 or whatever
    return response

我觉得你的答案太宽了。但是,要返回json对象,请导入json及其object.json()

或者您可以从flask导入json库

from flask import jsonify
def myMethod():
    ....
    response = jsonify(data)
    response.status_code = 200 # or 400 or whatever
    return response

如果我只对一个文件执行相同的操作,而不将send_file()包装在{}中,那么我可以使用java脚本在前端访问该文件

你是说:

return send_file('path/to/file.png')
这是可行的,因为Flask的
send_file
函数实际上返回一个
响应
对象

这也是有效代码:

在这里,您将返回一个字典,其中包含键
'message'
和值
'File not found!'。Flask将把它变成一个
响应
对象,状态代码为
404

那本词典是自动命名的

当您尝试返回此文件时:

return {"file1" : send_file('uploads/kode.png')}, 200
然后对
send\u file
返回的
响应
对象进行jsonified,因此出现异常:

TypeError:Response类型的对象不可JSON序列化


实现这一点的显而易见的方法是,前端应该为每个映像向服务器发出单独的请求,传递Flask route函数应该使用的某种ID来计算文件路径,然后最终:
return sendfile(filepath)

如果您真的想在一个JSON响应中发送多个图像,您可以查看并生成一个可以JSON序列化的数据uri字符串。但是,除非您确实需要将该数据作为JSON传递,否则前一个选项可能是go-to


如果我只对一个文件执行相同的操作,而不将send_file()包装在{}中,那么我可以使用java脚本在前端访问该文件

你是说:

return send_file('path/to/file.png')
这是可行的,因为Flask的
send_file
函数实际上返回一个
响应
对象

这也是有效代码:

在这里,您将返回一个字典,其中包含键
'message'
和值
'File not found!'。Flask将把它变成一个
响应
对象,状态代码为
404

那本词典是自动命名的

当您尝试返回此文件时:

return {"file1" : send_file('uploads/kode.png')}, 200
然后对
send\u file
返回的
响应
对象进行jsonified,因此出现异常:

TypeError:Response类型的对象不可JSON序列化


实现这一点的显而易见的方法是,前端应该为每个映像向服务器发出单独的请求,传递Flask route函数应该使用的某种ID来计算文件路径,然后最终:
return sendfile(filepath)


如果您真的想在一个JSON响应中发送多个图像,您可以查看并生成一个可以JSON序列化的数据uri字符串。但是,除非您确实需要将该数据作为JSON传递,否则前一个选项可能是go to.

什么是“文件的JSON”?您希望用户以您问题中的代码收到什么样的响应?如果我只对一个文件执行相同的操作,而不将send_file()包装在{}中,我可以使用java脚本在前端访问该文件。什么是“文件的json”?您希望用户以您问题中的代码收到什么样的响应?如果我只对一个文件执行相同的操作,而不将send_file()包装在{}中,我可以使用java脚本在前端访问该文件。感谢您的解释。为什么我不使用base64编码?来自前端的Api调用代价高昂。感谢您的解释。为什么我不使用base64编码?来自前端的Api调用代价高昂。