Asayomu Tech
注目★★★★★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 との境界で型の取り決めを文書化してから本番運用に入るべき。

詳細を読む → 元記事へ※ 本文は元記事をご確認ください (asayomu は要約のみ提供)

関連する記事

※ 外部記事の権利は原著作者に帰属します。著作権削除要請は copyright@asayomu.jp までご連絡ください(受領確認 24h・実処理 72h 以内)。