0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

JSONとは

Posted at

JSONについて

JSON (JavaScript Object Notation)は、データ交換フォーマットの一種で、 名前にはJavaScriptと入っているが、現在ではJavaScriptに限らず、 各種プログラム言語で利用できる。
特徴としては、テキスト形式で可読性が高いこと、単純で軽量なことなどが挙げられます。 JSONは、同様にテキストベースであるXML(Extensible Markup Language)と比べてもよりシンプルであり、 各種言語との親和性も高く使い勝手も良いことから、 最近はWebアプリケーションなどで利用されている。

JSONのフォーマットでは、四つの基本的な型(文字列、数値、ブール値、null値)と、 二つの構造型(オブジェクト、配列)を表現できます。 単純なため、JSONはJavaScriptだけではなく、 C、C++、Objective-C、Java、Perl、Ruby、Pythonなど、 現在は多数の言語で利用可能になっている。そのため、これらの言語をまたいで、 あるいはネットワークを通して、データを交換できる。

JSONの文法

{ ... } の中に、変数名と値をコロン(:)で区切り、下記の様に記述する。

{ "name": "Yamada" }

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

{ "name": "Yamada", "age": 28 }

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

○ { "name": "Yamada", "age": 28 }
× { 'name': "Yamada", 'age': 28 }
× { name: "Yamada", age: 28 }

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

{
  "name": "Yamada",
  "age": 28
}

下記の様に、配列や値のみの表記も 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 では下記の通りである

文字列 ("...")
数値 (123, 12.3, 1.23e4 など)
ヌル値 (null)
真偽値 (true, false)
オブジェクト ({ ... })
配列 ([...])
文字列("...")

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

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

\" ... ダブルクォーテーション(")
\\ ... バックスラッシュ(\)
\/ ... スラッシュ(/) ... 単にスラッシュ(/)のみを記述することも可能
\b ... バックスペース
\f ... フォームフィード
\n ... ラインフィード
\r ... キャリッジリターン
\t ... タブ
\uXXXX ... Unicode文字(UTF-8でエンコードした文字でも可能)
数値(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 }
  ]
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?