FastAPI教程 JSON兼容編碼器

2022-08-20 11:44 更新

在某些情況下,您可能需要轉(zhuǎn)換數(shù)據(jù)類型(如Pydantic模型),將其轉(zhuǎn)換為與JSON兼容的數(shù)據(jù)結(jié)構(gòu)(如dict,list等)。

例如,如果您需要將其存儲(chǔ)在數(shù)據(jù)庫(kù)中。

為此,F(xiàn)astAPI提供了一個(gè)jsonable_encoder()函數(shù)。

使用 jsonable_encoder

假設(shè)您有一個(gè)fake_db僅接收 JSON 兼容數(shù)據(jù)的數(shù)據(jù)庫(kù)。

例如,它不接收datetime對(duì)象,因?yàn)檫@些對(duì)象與 JSON 不兼容。

因此,必須將datetime對(duì)象轉(zhuǎn)換為str包含ISO 格式數(shù)據(jù)的對(duì)象。

同樣,該數(shù)據(jù)庫(kù)不會(huì)接收 Pydantic 模型(具有屬性的對(duì)象),只會(huì)接收dict.

你可以用jsonable_encoder它。

它接收一個(gè)對(duì)象,如 Pydantic 模型,并返回一個(gè) 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 模型轉(zhuǎn)換為一個(gè)字典,并將這個(gè)datetime轉(zhuǎn)換為一個(gè)字符串。

調(diào)用它的結(jié)果是可以用 Python 標(biāo)準(zhǔn)編碼的東西json.dumps()。

它不會(huì)str以 JSON 格式(作為字符串)返回包含數(shù)據(jù)的大文件。它返回一個(gè) Python 標(biāo)準(zhǔn)數(shù)據(jù)結(jié)構(gòu)(例如 a dict),其值和子值都與 JSON 兼容。

FastAPI內(nèi)部實(shí)際上使用jsonable_encoder來轉(zhuǎn)換數(shù)據(jù)。但它在許多其他場(chǎng)景中很有用。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)