【问题标题】:FastAPI - How to read an json file while using UploadFileFastAPI - 如何在使用 UploadFile 时读取 json 文件
【发布时间】:2020-11-20 16:52:50
【问题描述】:
from typing import List, Optional

from fastapi import FastAPI, File, UploadFile
from fastapi.responses import HTMLResponse
from pydantic import BaseModel

app = FastAPI(debug=True)
@app.post("/uploadfiles/")
def create_upload_files(upload_file: UploadFile = File(...)):
     json_data =  ??  upload_file ?? 
     result = model().calculate(json_data)
     return { "estimation": result}


@app.get("/")
async def main():
    content = """
<body>
<form action="/uploadfiles/" enctype="multipart/form-data" method="post">
<input name="upload_file" type="file" multiple>
<input type="submit">
</form>
</body>
    """
    return HTMLResponse(content=content)

我有上面的 FastAPI 应用程序。我需要上传一个json文件。因此upload_file 是一个json 文件。此外,model() 实例使用了一种方法计算,该方法将 json 数据作为输入。我纠结于如何将上传文件从 Fast_API 解码为字典格式。

我试过了 upload_file.read() 但这会返回一个字节数组

你能帮忙吗?

【问题讨论】:

    标签: python api fastapi


    【解决方案1】:

    您可以使用标准的json 模块来解析内容,方法是使用上传的JSON 文件中的json.load()--(Doc) 作为

    from fastapi import FastAPI, File, UploadFile
    import json
    
    app = FastAPI(debug=True)
    
    
    @app.post("/uploadfiles/")
    def create_upload_files(upload_file: UploadFile = File(...)):
        json_data = json.load(upload_file.file)
        return {"data_in_file": json_data}

    因此,您的 json_data 变量中将包含 JSON 内容。

    或者,您可以使用json.loads()--(Doc) 函数作为

    json_data = json.loads(upload_file.file.read())
    

    【讨论】:

    • 感谢您的回答;)我认为您需要 .read() on json_data = json.load(upload_file.file.read() 您能否编辑您的答案以关闭您同意的问题?
    • 没有。如果您使用 json.load(...),则必须使用 upload_file.file(顺便说一句,json.load(...)json.loads(...) 不同)
    • @A.Papa 用更多信息更新了答案。
    猜你喜欢
    • 1970-01-01
    • 2020-05-30
    • 2020-12-14
    • 2021-03-28
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多