提问人:Amin Ba 提问时间:4/19/2023 最后编辑:Daniil FajnbergAmin Ba 更新时间:4/19/2023 访问量:744
调用 Pydantic 模型的 dict 和将其传递给 jsonable_encoder 函数有什么区别?
What is the difference between calling dict of a Pydantic model and passing it to the jsonable_encoder function?
问:
我有这个 Pydantic 模型:
from pydantic import BaseModel
class Student(BaseModel):
name: str
id: str
我在 FastAPI 文档中看到,如果我们想传递它,我们这样做:JSONResponse
from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse
app = FastAPI()
@app.get("/")
def get_a_specific_student():
s = Student(id="1", name="Alice")
status_code = 200
content = jsonable_encoder(s)
return JSONResponse(status_code=status_code, content=content)
我们可以做:
@app.get("/")
def get_a_specific_student():
s = Student(id="1", name="Alice")
status_code = 200
content = s.dict()
return JSONResponse(status_code=status_code, content=content)
调用 Pydantic 对象的方法和将其传递给 有什么区别?dict
jsonable_encoder
答:
1赞
nigh_anxiety
4/19/2023
#1
Python dict 对象允许 JSON 不允许的很多事情。主要是,任何可哈希对象都可以用作 dict 键,任何对象都可以用作 dict 值,不受限制。
在 JSON 中,键必须是用双引号书写的字符串。
此外,JSON 值仅限于以下类型:
- 字符串
- 一个数字
- an object(一个 JavaScript 对象,~= Python 中的字典)
- 数组
- 布尔值
- null(在 Python 中不存在,但 None 是近似的等价物)
Jsonable_encoder将确保对象是有效的 JSON。例如,所有键都将转换为字符串,dict 值中的 Python 对象将被 repr() 值替换,等等。
评论
return Student(id="1", name="Alice")