コメントなどが書けるJSON5の読み込みなどの使用方法

JSON5とは

JSON5とはJSONのスーパーセットでECMAScript 5.1のプロダクションを含むように構文を拡張し、JSONの制限を緩和することを目的としています。

JSON5ではJSONでは使用できなかった以下のようなことができる。

  • コメント
  • 末尾カンマ
  • 改行文字のエスケープ
  • 16進数 (0xFF)
  • NaNやInfinityなどが入れられる
  • シングルクォーテーション( ' )

JSON5のサンプル

{
  /*
    複数行コメント
    キーは引用符を省略できます。
  */

  // シングルクォートが使用可能
  string: '文字列の\
改行文字をエスケープできる。',

  // 16進数が使用可能
  num: 0xFF,

  // 末尾カンマが使用可能
  object: {
    "キー": "値",
  },

  // NaNやInfinityも入れられる
  arr: [
    NaN,
    Infinity,
  ],
}

JSON5のVS Code拡張機能をインストール

JSON5はVS Codeで書く場合はJSON5 syntaxという拡張機能をインストールすればきれいに表示される。

言語モードをJSONで書こうとするときれいに表示されないので注意。

JSON5 syntax

JavaScriptでJSON5を読み込む方法

JavaScriptのfetchでJSONを読み込む場合は以下のように書くが、JSON5はjson()メソッドで本文の内容を抽出できない。

fetch('https://jsonplaceholder.typicode.com/todos/1')
  .then(response => response.json())
  .then(json => console.log(json))

そのためJSON5の場合はtext()でテキストを抽出してnpmかCDNであらかじめJSON5をインストールしておき、これを使用してパースする。

npm i -D json5
// Modules
import JSON5 from 'json5'
 
// or CommonJS
const JSON5 = require('json5')
<!-- CDN -->
<script src="https://unpkg.com/json5@2/dist/index.min.js"></script>
fetch('sample.json5')
  .then(response => response.text())
  .then(json5 => JSON5.parse(json5))
  .then(data => console.log(data))
JSON5 Console結果

sample.json5をfetchで読み込んだサンプル

jQueryもJSON5.parse()が必要

jQueryでdatasetにjson5を指定してもテキストとして読み込まれるだけなので注意が必要。

jQueryもfetchのときと同様にJSON5.parse()を使用してください。

$.ajax({
  url: 'sample.json5',
  datatype: 'json5',
}).done(function (data) {
  console.log(JSON5.parse(data))
})

sample.json5をjQueryで読み込んだサンプル