JSON

JavaScript 由来の軽量なデータ交換フォーマットで、Web API のデファクトスタンダード

データ形式Web

JSON とは

JSON (JavaScript Object Notation) は、Douglas Crockford が 2001 年に標準化した軽量なデータ交換フォーマットである。人間にも機械にも読みやすく、ほぼすべてのプログラミング言語でパーサーが提供されている。Web API のレスポンス形式として事実上の標準だ。

データ型

{
  "string": "Hello",
  "number": 42,
  "float": 3.14,
  "boolean": true,
  "null": null,
  "array": [1, 2, 3],
  "object": { "key": "value" }
}
注意点
文字列 "hello" ダブルクォートのみ (シングル不可)
数値 42, 3.14 Infinity, NaN は不可
真偽値 true, false
null null undefined は不可
配列 [1, 2, 3]
オブジェクト {"key": "value"} キーは文字列のみ

JSON にないもの

  • コメント (//, /* */)
  • 末尾カンマ ([1, 2, 3,])
  • undefined, Infinity, NaN
  • 日付型 (文字列として "2026-04-01T00:00:00Z" で表現)
  • BigInt

TypeScript での操作

// シリアライズ
const json = JSON.stringify({ name: 'Alice', age: 30 });
// '{"name":"Alice","age":30}'

// デシリアライズ (戻り値は any → 型検証が必要)
const data = JSON.parse(json); // any 型

// ✅ Zod でバリデーション + 型推論
import { z } from 'zod';
const UserSchema = z.object({ name: z.string(), age: z.number() });
const user = UserSchema.parse(JSON.parse(json)); // { name: string; age: number }

JSON vs 他のフォーマット

フォーマット 用途 コメント 型の厳密さ
JSON API、データ交換 不可 中程度
YAML 設定ファイル、CI/CD 可能 曖昧
TOML 設定ファイル 可能 厳密
Protocol Buffers マイクロサービス間通信 - 厳密 (スキーマ必須)

DynamoDB と JSON

DynamoDB のアイテムは JSON に似た構造だが、型情報が付与される。

// DynamoDB のアイテム (マーシャリング形式)
{ "userId": { "S": "123" }, "age": { "N": "30" }, "tags": { "L": [{ "S": "admin" }] } }

// AWS SDK v3 のマーシャリングで通常の JSON として扱える
{ "userId": "123", "age": 30, "tags": ["admin"] }

JSON Lines (JSONL)

1 行に 1 つの JSON オブジェクトを記述する形式。ログファイルやストリーミング処理で使われる。

{"timestamp":"2026-04-01T10:00:00Z","level":"INFO","message":"Request received"}
{"timestamp":"2026-04-01T10:00:01Z","level":"ERROR","message":"DB connection failed"}

Athena で S3 上の JSONL ファイルを直接クエリできる。

JSON の理解を深めるには関連書籍が参考になる。

関連用語