注目★★★★★Lobsters
JSON データの暗黙の型変換:9 桁の ID が勝手に変わる
30秒で把握
- 1JSON.stringify で 9007199254740993 が 9007199254740992 に丸まる、精度喪失は解析時に発生
- 2undefined が削除、NaN が null に、Date が ISO 文字列に勝手に変換される
- 3ID・金額は文字列または BigInt スキーマで明示し、JSON の型変換を呼び出し側で制御すべき
要約
JavaScript で JSON 化すると、数値精度が無意識に失われる。IEEE 754 の 53 ビット安全整数範囲を超える値 (9007199254740993 など) は丸められ、JSON.stringify と JSON.parse で異なる値に変換される。undefined は JSON で削除され、NaN と Date も別の型 (null と文字列) に変換される。スキーマで明示しない限り、JSON を経由したデータの丸めや型変換は検証後の復元が不可能になる。
あなたへの影響
JavaScript で大きな整数を扱う場合、JSON 経由で往復させると精度が失われる可能性がある。
推奨:数値 ID や金額を扱うチームは BigInt または 10 進数文字列による明示的なスキーマを設計し、JSON との境界で型の取り決めを文書化してから本番運用に入るべき。