JSON5 まとめ


JSON5 とは

  • JSONフォーマットのスーパーセット
  • 設定ファイル向けに人間による読み書きが容易になるように拡張
  • JSON with Comments(jsonc) を発展させた感じ
  • ES5のサブセット

リポジトリは以下です。

github.com

JSON APIと同じように利用することができます。

npm install json5

JSON5.parse(text)
JSON5.stringify(value)


JSON との比較

機能 JSON JSON5
コメント 不可 可 (単一行 // および 複数行 /* */)
末尾のカンマ 不可 可 (オブジェクト・配列)
キー(プロパティ名) ダブルクォート必須 ("key") クォート省略可 (識別子として有効な場合)
文字列の囲み ダブルクォートのみ (") シングルクォートも可 (')
複数行文字列 不可 (改行文字 \n が必要) 可 (行末に \ を置くことで改行可能)
数値表現 10進数のみ 16進数 (0x)、Infinity、NaN、符号 (+)
小数点 先頭/末尾の省略不可 (0.5) 省略可 (.5, 1.)

以下のように記載できます。

{
  section: 'config', // キーのクォート省略、シングルクォート可
  timeout: +1000,    // 正の符号
  features: [
    'login',
    'search',        // 末尾のカンマ可
  ],
  color: 0xff0000,   // 16進数で記述可
  fraction: .5       // 0.5の省略形可
}


コメント

  • JSON: コメントは一切書けない
  • JSON5: JavaScript同様のコメントが書ける
// 単一行コメント

/*
  複数行
  コメント
*/


オブジェクトのキー

  • JSON: キーは必ずダブルクォートで囲む必要がある
  • JSON5: JavaScriptの識別子として有効な文字列であれば、クォートを省略できる
{ "name": "Gemini" }
{ name: "Gemini" }

my-name のようなハイフン入りやスペース入りのキーは、JSON5でもクォートが必要


末尾のカンマ

  • JSON: 配列やオブジェクトの最後の要素にカンマがあるとエラー
  • JSON5: 最後の要素のカンマは許容
{
  id: 1,
  name: "Apple", // JSON5ではOK、JSONではエラー
}

項目の追加/削除やGitの差分確認が楽になります。


文字列

  • JSON: ダブルクォート " のみ使用可能
  • JSON5: シングルクォート ' も使用可能. 行末に \ を置くことで、長い行を改行して記述できる
{
  lineBreaks: "Look, Mom! \
No \\n's!",
}


数値

JSON では扱えない以下の記載が可能となっています。

  • 16進数: 0xdecaf のような記述が可能
  • 小数点: .55. のような記述が可能
  • 特殊な値: Infinity, -Infinity, NaN が使用可能
    • JSONはこれらを扱えず、通常 null に変換される
  • 符号: 正の符号 +10 が許可される