とほほのJSON入門

目次

JSONとは

JSONの文法

よく利用されるケースとしては、{ ... } の中に、変数名と値をコロン(:)で区切り、下記の様に記述します。

{ "name": "Tanaka" }

カンマ(,)で連結することにより、複数の変数名と値のペアを指定することができます。

{ "name": "Tanaka", "age": 26 }

変数名(name や age)はダブルクォーテーション(")で囲みます。JavaScript ではシングルクォーテーション(')で囲んだり、変数名をそのまま記述することができますが、JSON ではダブルクォーテーションのみとなります。

○ { "name": "Tanaka", "age": 26 }
× { 'name': "Tanaka", 'age': 26 }
× { name: "Tanaka", age: 26 }

読みやすさのために、インデントをつけて表記されることも多いようです。インデントは 4文字スペースや 2文字スペースがよく用いられます。

{
  "name": "Tanaka",
  "age": 26
}

下記の様に、配列や値のみの表記も JSON に従ったデータとして認められます。

○ ["ABC", "DEF"]
○ "ABC"
○ 123

JSONのエンコーディング

過去の仕様では単に Unicode が推奨され、先頭の 2バイトで UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE を見分けるとされていましたが、RFC 8259 で指定された仕様では、BOM 無しの UTF-8 で記述する(MUST)と定義されています。

JSONの型

JSON では下記の型を使用することができます。

文字列("...")

ダブルクォーテーション(")で囲んだ文字列を指定します。

{ "name": "Tanaka" }

文字としては、0x00~0x1F までの制御文字、ダブルクォーテーション(")、バックスラッシュ(\)を除く、UTF-8 でエンコードした Unicode 文字列を使用できます。サロゲートペアも使用可能です。ダブルクォーテーション(")、バックスラッシュ(\)を使用するには、下記のエスケープシーケンスを使用します。

数値(123, 12.3, 1.23e4)

123, 12.3, 1.23e3 などの数値を指定します。

{
  "age": 26,
  "pi": 3.14,
  "planck_constant": 6.62607e-34
}

数値は IEEE 754 の 64ビット倍精度の数値として扱われます。整数の場合は -2^53+1(-9,007,199,254,740,991)~2^53-1(9,007,199,254,740,991) の精度を扱うことができます。浮動小数の場合は、仮数部53ビット(10進数で15~16桁)、指数部11ビット(10進数で-1022~+1023)の精度を扱うことができます。精度を超える場合は丸め誤差が発生します。

ヌル値(null)

値が無いことを示すヌル値を null で指定します。null はすべて小文字で指定します。

{
  "name": null
}

真偽値(true, false)

真偽を true または false で指定します。true や false はすべて小文字で指定します。

{
  "active_flag": true,
  "delete_flag": false
}

オブジェクト({...})

オブジェクトを {...} で指定します。オブジェクトは階層構造を持つことができます。

{
  "user_info": {
    "user_id": "A1234567",
    "user_name": "Yamada Taro"
  }
}

配列([...])

配列を [...] で指定します。配列要素には、文字列、数値、ヌル値、真偽値、オブジェクト、配列すべてを使用することができます。

{
  "color_list": [ "red", "green", "blue" ],
  "num_list": [ 123, 456, 789 ],
  "mix_list": [ "red", 456, null, true ],
  "array_list": [ [ 12, 23 ], [ 34, 45 ], [ 56, 67 ] ],
  "object_list": [
    { "name": "Tanaka", "age": 26 },
    { "name": "Suzuki", "age": 32 }
  ]
}

Copyright (C) 2018-2020 杜甫々
初版:2018年5月6日 最終更新:2020年9月13日
http://www.tohoho-web.com/ex/json.html