よく利用されるケースとしては、{ ... } の中に、変数名と値をコロン(:)で区切り、下記の様に記述します。
{ "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
過去の仕様では単に Unicode が推奨され、先頭の 2バイトで UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE を見分けるとされていましたが、RFC 8259 で指定された仕様では、BOM 無しの UTF-8 で記述する(MUST)と定義されています。
JSON では下記の型を使用することができます。
ダブルクォーテーション(")で囲んだ文字列を指定します。
{ "name": "Tanaka" }
文字としては、0x00~0x1F までの制御文字、ダブルクォーテーション(")、バックスラッシュ(\)を除く、UTF-8 でエンコードした Unicode 文字列を使用できます。サロゲートペアも使用可能です。ダブルクォーテーション(")、バックスラッシュ(\)を使用するには、下記のエスケープシーケンスを使用します。
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 はすべて小文字で指定します。
{ "name": null }
真偽を 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 } ] }