JSON5 とは
- JSONフォーマットのスーパーセット
- 設定ファイル向けに人間による読み書きが容易になるように拡張
- JSON with Comments(jsonc) を発展させた感じ
- ES5のサブセット
リポジトリは以下です。
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のような記述が可能 - 小数点:
.5や5.のような記述が可能 - 特殊な値:
Infinity,-Infinity,NaNが使用可能- JSONはこれらを扱えず、通常
nullに変換される
- JSONはこれらを扱えず、通常
- 符号: 正の符号
+10が許可される