🤪
req.json()とは
短く言うと req.json() は「req(リクエスト本体)に入っているボディを JSON として読み取り、JSの値にパースして返すメソッドです。
そもそもJSONとは?
JSON は、データをテキストで表現するための軽量フォーマット。
使える値の型:object {} / array [] / string / number / boolean / null
仕様のポイント
-
文字列は ダブルクォート必須("key" : "value")
-
undefined、NaN、Infinity、Date、BigInt は JSONとして無効(Dateは文字列として送るのが一般的)
典型例
{
"id": "u_123",
"name": "Haru",
"roles": ["user", "admin"],
"active": true,
"createdAt": "2025-10-25"
}
APIとJSONの関係(リクエスト/レスポンス)
HTTP API では、クライアント⇄サーバ間のデータの“梱包材” として JSON がよく使われます。
軽量なため通信の際にデータをJSONにして送る。
リクエストでの使い方
- ボディにJSONを入れる → サーバはそれを req.json() 等でパース
- 必ず Content-Type を付ける:Content-Type: application/json
- 必要なら受け取りフォーマットを示す:Accept: application/json
クライアント(fetch)の例
await fetch("/api/notices", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Accept": "application/json"
},
// JS値 → JSON にしてる
body: JSON.stringify({
message: "Hello",
type: "info",
startAt: Date.now(),
}),
});
サーバ(Next.js Route Handler)の例
export async function POST(req: Request) {
try {
const payload = await req.json(); // JSON→JS値にしてfirebaseなどに保存
const parsed = NoticeSchema.parse(payload);
return Response.json({ ok: true }, { status: 201 });
} catch (e) {
return new Response("Invalid JSON or schema", { status: 400 });
}
}
JSON → JS値 とは
JSON文字列(テキスト)をJavaScriptの実データ(オブジェクト/配列/数値/真偽/null)
に“パースして”変換することを指します。
実装的には JSON.parse(...) や await req.json() がそれです。
const json = '{"id": 1, "name": "Haru", "active": true, "tags": ["nextjs", "ts"], "since": "2025-10-01"}';
const obj = JSON.parse(json);
// obj: { id: 1, name: "Haru", active: true, tags: ["nextjs","ts"], since: "2025-10-01" }
レスポンスでの使い方
サーバはJSONで返すのが一般的(Response.json(data) など)
return Response.json({ data: items, nextCursor: "abc" });
ざっくり整理
- HTTPは運び方:ボディに何を入れるかは任意。入れるものの種類を Content-Type で宣言します。
送る側:JSON.stringify Jsonにして送信
受ける側:req.json() 取得したデータをJSON → JS値
Discussion