JSON と JavaScript オブジェクトリテラルの違い

JSON は JavaScript オブジェクトリテラルに似ていますが、より小さく、より厳格で、実行可能な値を含まないデータフォーマットです。

短いまとめ

JavaScript のオブジェクトリテラルはソースコードです。JSON はデータ交換のためのフォーマットです。重なりは大きく、混同しがちですが、ルールは違います:JSON のキーと文字列はダブルクォート必須、コメントは無し、関数・undefined・NaN・Infinity・Date オブジェクト・正規表現は表現できません。

有効な JSON 値

JSON ドキュメントには、オブジェクト・配列・文字列・数値・真偽値・null のいずれかを置けます。文字列はダブルクォートを使い、オブジェクトのキーもダブルクォートの文字列でなければなりません。数値は 16 進記法、NaN、Infinity、数値セパレータなど JavaScript 専用の形式は使えません。

  • 有効な JSON 文字列:"hello"
  • 有効な JSON 真偽値:true
  • 有効な JSON null:null
  • 有効な JSON オブジェクトキー:"name"

JavaScript としては有効だが JSON としては無効

{ name: 'Ada', active: true, createdAt: new Date(), onSave() { return true }, tags: ['dev',], }

対応する有効な JSON

{ "name": "Ada", "active": true, "createdAt": "2026-05-13T00:00:00.000Z", "tags": ["dev"] }

API が JavaScript っぽいデータを拒否する理由

API サーバは通常、リクエストボディを JSON パーサで解析し、JavaScript エンジンでは解析しません。これはセキュリティと相互運用性の利点です:どの言語もコードを実行せずに同じデータを解析できます。本文にコメント、メソッド、undefined、new Date() などが含まれると、サーバは安全にデータとして扱えません。

安全に変換する方法

実行可能な値や言語固有の値を、純粋なデータに置き換えてください。日付は文字列に、欠損値は null またはキーを省略、コメントはドキュメント側に移し、関数はストラテジー名や型の値のような明示的なデータフィールドで表現します。