最近は、LLM達がプログラムを作ってくれるので、いろんな理解が曖昧なままでも、どうにかなります。
今のところ、LLM達作ってくれるプログラムを繋ぎ合わせるのは人類の仕事ですが、
それさえ、ある程度どうにかしてくれます。
とはいえ、曖昧なまま放置してると、
「アー、こいつら 同じ事を何種類か違う表記で使ってややこしい」 って気づく場面がやってきました。
真面目にPythonの教科書読んだこともないままPythonのプログラム作ってます。が、これは現代では正しい生き方と思われます。
プログラミングなんてもうすぐ無くなる技術であり、そもそもLLMが作ってくれるんですがから、真面目に覚えるのは間違いです。
必要になった時に必要な部分を教えてもらった方が効率的です。
また、1冊の教科書を1から読んでる暇あったら、薄っすら分かる技術領域を広げるために同じ時間で5種類使えるようになるべきです。
指示できる程度でよいのですから。
ただ、それを解説してもらうのもLLMです
なので、いろんなLLMに
「JSONって文字列なのか、辞書型なのか、クラスなのか、FastAPIに投げた後どうなってるのか?」
聞いてみました。(DeepSeek R1/Sonet3.7/GPT)
今回は、GPTさんの回答が分かりやすかったので貼っておきます。
結論的には、Python でJSONを表すのは、文字列・辞書型・Pydantic(クラス)の3種類あって、
LLM達が自由に混ぜて作るもんだから混乱した って感じです
------------GPTさんの解説 (装飾取れたら読みづらいですねー)-------
from fastapi import FastAPI
from typing import Dict, List
app = FastAPI()
@app.post("/api/test")
async def receive_connections(data: Dict[str, List[Dict[str, int]]]):
print(type(data)) # <class 'dict'>
return data
data は dict であり、そのキー "connections" は list を持つ。
list の中には dict が含まれる。(例:{"output": 1, "input": 5})
(2) Pydanticモデルを使う場合
より型安全に扱うために、Pydanticのモデルを使うのが一般的です:
python
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
app = FastAPI()
class Connection(BaseModel):
output: int
input: int
class ConnectionsRequest(BaseModel):
connections: List[Connection]
@app.post("/api/test")
async def receive_connections(data: ConnectionsRequest):
print(type(data)) # <class '__main__.ConnectionsRequest'>
return data
data は ConnectionsRequest のインスタンスになる。
ConnectionsRequest.connections は List[Connection] となる。
Connection クラスの各要素(output / input)は int である。
結論
JSONはデータフォーマット であり、Pythonには JSON型は存在しない。
JSONの実体は文字列 であり、Pythonの dict や list に変換して扱うことが多い。
FastAPIでJSONを受け取ると、自動的に dict や Pydanticモデルに変換される。
curlで送信されるJSONデータは、FastAPIのエンドポイントでは dict または Pydanticのデータクラスとして処理される。
参考: FastAPIで受け取ったデータのPython型
FastAPIの受け取り方 Pythonでの型
Dict[str, List[Dict[str, int]]] dict
ConnectionsRequest (Pydanticモデル) ConnectionsRequest クラス
まとめ
curl で送信した JSON は FastAPI では dict や Pydantic のモデルに変換 される。
JSONそのものは 文字列 であり、Pythonには「JSON型」は存在しない。
Pythonの dict は JSONと似ているが厳密には異なる(キーが文字列である必要がある、順序の保証が異なる など)。
FastAPIでは dict を直接使うか、Pydanticモデルを使うのが一般的。
これで、FastAPI に渡る JSON の Python での型や、JSON の扱いについて理解できるはずです! ??
ーーーーーー
必要としてる人にはわかるけど、必要としてない人には分からないし、分かる必要もないです
必要になった時にLLMに聞けば良いだけです