> 백엔드 개발 > 파이썬 튜토리얼 > FastAPI가 Flask와 다르게 JSON 직렬화를 처리하는 이유는 무엇입니까?

FastAPI가 Flask와 다르게 JSON 직렬화를 처리하는 이유는 무엇입니까?

DDD
풀어 주다: 2024-12-07 07:40:16
원래의
257명이 탐색했습니다.

Why Does FastAPI Handle JSON Serialization Differently Than Flask?

FastAPI가 Flask와 다르게 JSON 데이터를 반환하는 이유는 무엇입니까?

잘못된 접근 방식:

json.dumps를 사용하여 객체를 직렬화하는 경우 () FastAPI로 반환하기 전에 JSON이 두 번 직렬화됩니다. 이 이중 직렬화로 인해 관찰된 문자열 출력이 발생합니다.

해결책 1: JSON 변환을 위한 단순 반환

이를 수정하려면 평소대로 데이터(예: 사전 또는 목록)를 반환하면 됩니다. FastAPI는 이를 자동으로 JSON으로 변환하여 날짜/시간 객체가 적절하게 표시되도록 합니다.

예:

@app.get('/')
async def main():
    d = [
        {"User": "a", "date": date.today(), "count": 1},
        {"User": "b", "date": date.today(), "count": 2},
    ]
    return d
로그인 후 복사

출력:

[
  {
    "User": "a",
    "date": "2023-01-09",
    "count": 1
  },
  {
    "User": "b",
    "date": "2023-01-09",
    "count": 2
  }
]
로그인 후 복사
로그인 후 복사

해결책 2: 명시적 JSON에 대한 사용자 정의 응답 직렬화

필요한 경우 개체를 사용자 정의 응답 개체로 반환하기 전에 수동으로 직렬화할 수 있습니다. media_type을 'application/json'으로 설정하고 직렬화된 데이터를 직접 인코딩합니다.

예:

import json

@app.get('/')
async def main():
    d = [
        {"User": "a", "date": date.today(), "count": 1},
        {"User": "b", "date": date.today(), "count": 2},
    ]
    json_str = json.dumps(d, indent=4, default=str)
    return Response(content=json_str.encode('utf-8'), media_type='application/json')
로그인 후 복사

출력:

[
  {
    "User": "a",
    "date": "2023-01-09",
    "count": 1
  },
  {
    "User": "b",
    "date": "2023-01-09",
    "count": 2
  }
]
로그인 후 복사
로그인 후 복사

위 내용은 FastAPI가 Flask와 다르게 JSON 직렬화를 처리하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿