JSONフォーマット

目次

JSONとは

JSON(じぇいそん、JavaScript Object Notation)はJavaScriptで用いるオブジェクト表記を基にしたフォーマットです。XMLより簡易的に扱えることもあり、ネットワーク上のデータのやり取りに用いられることが多くなっています。

{
  "Window": {
    "Top": 100,
    "Left": 200,
    "Width": 800,
    "Height": 600,
    "Maximize": true,
    "Zoom": 1.0
  },
  "Chart": {
    "ChartTitle": "Title",
    "LeftAxis": {
      "Caption": null,
      "AutoRange": true,
      "Maximum": 100.0,
      "Minimum": 0.0
    },
    "ColorList": ["red", "green", "blue"]
  }
}

JSONの特徴

  • JSONの仕様はRFC 8259IETF STD 90ECMA-404 2nd editionで定義されています。
  • ファイルの拡張子は「.json」です。
  • ファイルのエンコードは「BOMなしのUTF-8」です。
  • MIMEタイプは 「application/json」です。
  • 派生でJSONC、JSONLJSON5などいろいろあります。
    これにより何が正解のフォーマットなのか、混乱が生まれやすくなっています。
スクロールできます
JSONJSONCJSONLJSON5
全称(略)JSON with CommentsJSON LinesJSON for Humans
拡張子.json.jsonc.jsonl.json5
特徴コメントを記述できる{ … } を1行で記述するECMAScript 5.1の一部を取り込み、数値の表現が豊かになっている
JSONの比較

表記方法

オブジェクト

0個以上の名前/値のペアを注括弧「{ … }」で囲んで表します。

  • 名前は文字列です。
  • 名前と値はコロン「:」で区切ります。
  • 値と次の名前の間は、1つのカンマ「,」で区切ります。
真偽値

真を「true」、偽を「false」で表します。trueとfalseは小文字で表します。

"AutoRange": true
数値

整数、浮動小数点数を10進数で表します。下記の点に注意してください。

  • (-253+1)~(253-1)の範囲の整数値を扱えます。
  • 浮動小数点数はIEEE 754の64ビットで表せられる範囲としてください。
  • 「1.0e-2」のように指数表記も可能です。または「e」は大文字でも構いません。
  • 先頭に余分な0を追加してはいけません。
  • 先頭に符号の「+」を付けてはいけません。
  • 浮動小数点数の非数(NaN)や無限(Infinity)は表せられません。
"Width": 800,
"Pi": 3.14159265,
"PlanckConstant": 6.62607015e-34
文字列

ダブルクォーテーション「”」で囲むと文字列となります。バックスラッシュ(日本だと「\」)を用いたエスケープシーケンス記法も可能です。(下記参照)

  • “:ダブルクォーテーション(U+0022)
  • \:バックスラッシュ(U+005C)
  • /:スラッシュ(U+002F)
  • b:バックスペース(U+0008)
  • f:フォームフィード(U+000C)
  • n:ラインフィード(U+000A)
  • r:キャリッジリターン(U+000D)
  • t:タブ(U+0009)
  • uXXXX:(U+XXXX)
"ChartTitle": "Title"
ヌル

値がないことを「null」で表します。nullは小文字で表します。

"LeftAxisCaption": null
配列

0個以上の値を角括弧「[ … ]」で囲んで表します。各要素はカンマで区切ります。配列内の要素は同じ型である必要はありません。

"ColorList": ["red", "green", "blue"]

ケツカンマ問題

JSONには致命的に面倒な仕様があります。それはオブジェクトや配列の最後にカンマを付けてはいけないというものです。いわゆるケツカンマ問題です。下記例の中で、赤字のカンマはNGとなります。

{
  "LeftAxis": {
    "Maximum": 100,
    "Minimum": 0,
  },
  "RightAxis": {
    "Maximum": 10,
    "Minimum": 0,
  },
  "ColorList": ["red", "green", "blue",],
}

システム化していればこれは大した問題になりません。しかし手入力する場合、この仕様はとても手間になります。最終データが増減するたびに、カンマを付けたり削除したりしないといけません。

JSONの欠点を克服したJSON5

JSONの数々の不満点を解決したのがJSON5です。JSONと比較して、下記のような特徴があります。

  • オブジェクトや配列の最後にカンマがあっても良い。
  • 16進数で値を記述できます。(例:0xFF)
  • 数値に非数(NaN)や無限(Infinity、-Infinity)を設定できます。
  • 文字列をシングルクォーテーション「’」で囲うことができます。
  • Cファミリーのように「//」や「/* … */」でコメントを記述できます。
目次