W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在某些情況下,您可能需要轉(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ù)。
假設(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)景中很有用。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: