Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

PythonでJSONを任意の型にデコードしたい

How to convert JSON data into a Python object? - Stack Overflow

一番簡単なコードがこれ。

import json
j = json.loads(your_json)
u = User(**j)

こういうモデルを定義して、以下のようなコードを書いてFastAPIに食わせたら、普通に動いた。

from typing import List, Optional

from pydantic import BaseModel

class Item(BaseModel):
    item_id: int
    item_name: str
    thumbnail: str
    description: str
    x_list: Optional[List[str]]
    maker: Optional[Maker]

class Maker(BaseModel):
    uuid: str
    name: str
    furigana: str
    email: str
    zipcode: str
    address: str
    building: str
    tel: str
    fax: str
# fastapi
@router.get("/api/item")
async def fetch_item():
    import os
    base = os.path.dirname(os.path.abspath(__file__))
    with open(f'{base}/json/sample.json') as f:
        df = json.load(f)
        result = [Item(**x) for x in df] #これでオブジェクトに型変換できる
    return result