レッスン 11
値から JSON テキストを生成する
シリアライズ、キー順序、テストと API 向けの安定した出力。
生成(シリアライズ)は、メモリ上の値を走査して JSON テキストを書き出します — HTTP レスポンス、ファイルエクスポート、テスト fixture 向けです。パースの逆操作で、独自の設計判断があります。
デフォルト動作は実装によって異なる
多くのシリアライザーは:
undefinedプロパティを省略する(JavaScript)か、明示的な null 処理を要求する- 文字列を自動エスケープする
- 数値を 10 進形式で書き出す
概念的な例:
{"status": "ok", "count": 3}
status と count フィールドを持つオブジェクトから。
キー順序と安定した出力
JSON ではオブジェクトのキー順序は意味論的に重要ではありませんが、シリアライズ後のバイト順序は次の点で重要です。
- Git diff とスナップショットテスト
- 生バイトに対する暗号署名
- 正規 JSON から構築するキャッシュキー
論理的に等しい 2 つのオブジェクトが同一文字列を生成するよう、チームによってはキーをアルファベット順にソートしてからテキストを生成します。
整形 vs コンパクト生成
| モード | 使うとき |
|---|---|
| 整形(インデント付き) | 人間のレビュー、ドキュメント、デバッグ |
| コンパクト | ワイヤー転送、ストレージサイズが重要 |
同じデータは両方の形式で有効 — 正しさではなく、対象読者に基づいて選びましょう。
ラウンドトリップの考え方
理想的な流れ: 値 → テキスト → パース → 等しい値。浮動小数点数、大きな整数、カスタム型(日付、BigInt)は、規約(ISO 日付文字列、文字列エンコードされた小数)を定義しない限り、完全にラウンドトリップしないことがあります。
クライアントとサーバーが合意できるよう、API 仕様にこれらの規約を文書化しましょう。