Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa FastAPI Mengendalikan Pensirilan JSON Berbeza Daripada Flask?

Mengapa FastAPI Mengendalikan Pensirilan JSON Berbeza Daripada Flask?

DDD
DDDasal
2024-12-07 07:40:16278semak imbas

Why Does FastAPI Handle JSON Serialization Differently Than Flask?

Mengapa FastAPI Mengembalikan Data JSON Berbeza Daripada Flask?

Pendekatan Salah:

Apabila mensiri objek menggunakan json.dumps () sebelum mengembalikannya dalam FastAPI, JSON akan disirikan dua kali. Siri berganda ini menghasilkan output rentetan yang diperhatikan.

Penyelesaian 1: Pulangan Mudah untuk Penukaran JSON

Untuk membetulkannya, cuma kembalikan data seperti biasa (cth., dicts atau lists). FastAPI akan menukarnya secara automatik kepada JSON, memastikan objek datetime diwakili dengan sewajarnya.

Contoh:

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

Output:

[
  {
    "User": "a",
    "date": "2023-01-09",
    "count": 1
  },
  {
    "User": "b",
    "date": "2023-01-09",
    "count": 2
  }
]

Penyelesaian 2: Respons Tersuai untuk JSON Eksplisit Pensirian

Jika perlu, anda boleh mensiri objek secara manual sebelum mengembalikannya dalam objek Respons tersuai. Tetapkan media_type kepada 'application/json' dan enkodkan data bersiri sendiri.

Contoh:

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')

Output:

[
  {
    "User": "a",
    "date": "2023-01-09",
    "count": 1
  },
  {
    "User": "b",
    "date": "2023-01-09",
    "count": 2
  }
]

Atas ialah kandungan terperinci Mengapa FastAPI Mengendalikan Pensirilan JSON Berbeza Daripada Flask?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn