Skip to content

23. JSON Compatible Encoder


1. JSON Compatible Encoder

  • Pydantic 모델과 같은 어떠한 데이터 타입을 dictlist와 같이 JSON과 호환되는 데이터 타입으로 변환해야 하는 경우가 있다.
  • 데이터베이스에 해당 데이터를 저장해야 하는 경우를 예로 들 수 있는데, 이를 위해 FastAPI는 jsonable_encoder()를 제공한다.


2. Using the jsonable_encoder

  • JSON 호환 데이터만 수신하는 fake_db 데이터베이스가 있다고 가정해 보자.
  • 이런 상황에서 JSON과 호환되지 않는 datetime 객체는 수신되지 않는다.
  • 따라서 datetime 객체는 ISO 형식의 데이터를 포함하는 str 타입으로 변환되어야 한다.
  • 같은 방식으로, 이 데이터베이스는 속성이 있는 객체인 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

app = FastAPI()

fake_db = {}

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

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

    fake_db[id] = json_compatible_item_data


  • 위의 예제를 실행하면, JSON 전체에 대한 str 타입을 반환하는 것이 아니라 dict 타입과 같은 Python 표준 데이터 구조를 반환한다.
  • 그러므로 Python 표준 json.dumps()로 인코딩할 수 있는 것이다.

References