codecamp

FastAPI教程 JSON兼容编码器

在某些情况下,您可能需要转换数据类型(如Pydantic模型),将其转换为与JSON兼容的数据结构(如dict,list等)。

例如,如果您需要将其存储在数据库中。

为此,FastAPI提供了一个jsonable_encoder()函数。

使用 jsonable_encoder

假设您有一个fake_db仅接收 JSON 兼容数据的数据库。

例如,它不接收datetime对象,因为这些对象与 JSON 不兼容。

因此,必须将datetime对象转换为str包含ISO 格式数据的对象。

同样,该数据库不会接收 Pydantic 模型(具有属性的对象),只会接收dict.

你可以用jsonable_encoder它。

它接收一个对象,如 Pydantic 模型,并返回一个 JSON 兼容版本:

from datetime import datetime
from typing import Optional

from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel

fake_db = {}


class Item(BaseModel):
    title: str
    timestamp: datetime
    description: Optional[str] = None


app = FastAPI()


@app.put("/items/{id}")
def update_item(id: str, item: Item):
    json_compatible_item_data = jsonable_encoder(item)
    fake_db[id] = json_compatible_item_data

在此示例中,它将 Pydantic 模型转换为一个字典,并将这个datetime转换为一个字符串。

调用它的结果是可以用 Python 标准编码的东西json.dumps()

它不会str以 JSON 格式(作为字符串)返回包含数据的大文件。它返回一个 Python 标准数据结构(例如 a dict),其值和子值都与 JSON 兼容。

FastAPI内部实际上使用jsonable_encoder来转换数据。但它在许多其他场景中很有用。


FastAPI教程 路径操作配置
FastAPI教程 请求体 - 更新数据
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

FastAPI 用户指南

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }