首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FastApi -接收正文请求中的对象列表

FastApi -接收正文请求中的对象列表
EN

Stack Overflow用户
提问于 2021-08-04 11:07:48
回答 1查看 2.5K关注 0票数 2

我需要创建一个端点,它可以接收以下JSON并识别其中包含的对象:

代码语言:javascript
复制
{​
  "data": [
    {​
      "start": "A", "end": "B", "distance": 6
    }​,
    {​
      "start": "A", "end": "E", "distance": 4
    }​
  ]
}

我创建了一个模型来处理单个对象:

代码语言:javascript
复制
class GraphBase(BaseModel):
    start: str
    end: str
    distance: int

有了它,我可以把它保存在数据库里。但是现在我需要接收一个对象列表并保存它们。我试着这样做:

代码语言:javascript
复制
class GraphList(BaseModel):
    data: Dict[str, List[GraphBase]]

@app.post("/dummypath")
async def get_body(data: schemas.GraphList):
    return data

但是我一直在FastApi:Error getting request body: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)上收到这个错误,并且在响应上收到这个消息:

代码语言:javascript
复制
{
    "detail": "There was an error parsing the body"
}

我是python新手,甚至是FastApi新手,如何将JSON转换为GraphBase列表以将其保存在数据库中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-04 12:18:23

这是一个有效的示例。

代码语言:javascript
复制
from typing import List
from pydantic import BaseModel
from fastapi import FastAPI

app = FastAPI()

class GraphBase(BaseModel):
    start: str
    end: str
    distance: int

class GraphList(BaseModel):
    data: List[GraphBase]

@app.post("/dummypath")
async def get_body(data: GraphList):
    return data

我可以在自动生成的文档上尝试这个API。

或者,在控制台上(您可能需要根据您的设置调整URL ):

代码语言:javascript
复制
curl -X 'POST' \
  'http://localhost:8000/dummypath' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "data": [
    {
      "start": "string",
      "end": "string",
      "distance": 0
    }
  ]
}'

错误看起来像是数据问题。我发现你在几个地方有额外的空间。尝试以下操作:

代码语言:javascript
复制
{
  "data": [
    {
      "start": "A", "end": "B", "distance": 6
    },
    {
      "start": "A", "end": "E", "distance": 4
    }
  ]
}

额外空格的位置(我删除了)如下:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68650162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档