JSONファイルとは何か?
JSONファイルとは、ある決められたフォーマットのテキストファイルのことです。情報に名前(キー)をつけ、階層構造で記述していく形式です。
JavaScript Object Notationの略で、JavaScript用に開発されたものですが、構造がシンプルなため他の言語でも多用されています。
よく使われる場所
システムの設定ファイルや、情報データを保存するときに使われることが多いです。
例えば、「名前:太郎」「年齢:24」といったように、データのキー名(名前や年齢)と実際のデータ(太郎や24)をペアで保存できるため、ユーザー情報の保存で頻繁に使用されます。
JSONファイルの記述ルール
JSONファイルの基本的な記述ルールは以下の5点です。
- 「”キー名”:”値”」でワンセット
- 文字列はダブルクオテーションで囲む(キー名も)
- シングルクオテーション不可
- 値は①数値、②文字列、③真偽値(小文字)のいずれか
- ひとまとまりのデータを波カッコ{}で囲む。
- コメントアウトはありません
基本のデータ構造
{"キー名":"値"}
この形がベースになります。
データは並列並べたり、入れ子にできます。
・例えば、名前(name)が轟さんを保存する場合は、{"name":"轟"}
・27歳という年齢データも追加すると、{"name":"轟", "age":"27"}
・新たに、19歳の空条さんを追加する。{{"name":"轟", "age":"27"}, {"name":"空条", "age":"19"}}
情報をグループ化し、わかりやすく理解できます。
1つのキーに複数のデータを保存する
配列を使うと、一つのキーに対して複数のデータを保存することができます。{"キー名":[値1, 値2, 値3,,,,]}
値は文字列でも数値でも問題ありません。JSONの記述を入れることもできます。
例えば、轟さんが複数の趣味を持っている場合は以下のようになります。{"name":"轟", "age":"27","hobby":["aaa", "bbb", "ccc"]}
改行も可能
1行で記述することも改行で記述することもできます。可読性を重視することが多いため、改行で記述されていることが多いです。(パッと見1行と改行したものが全く別物に見えるので、初心者を混乱させます)
実例
{"name":"轟", "age":"27"}
は以下と同じです。
{
"name":"轟",
"age":"27"
}
{{"name":"轟", "age":"27"}, {"name":"空条", "age":"19"}}
は以下と同じです。
{
{
"name":"轟",
"age":"27"},
{
"name":"空条",
"age":"19"
}
}
{"name":"轟", "age":"27","hobby":["aaa", "bbb", "ccc"]}
は以下と同じです。
{
"name":"轟",
"age":"27",
"hobby":["aaa", "bbb", "ccc"]
}
改行することで、どういった情報が保存されていて、その塊がいくつあるかが見やすくなります。
値に2次元配列を使う
データの値に2次元配列を使うこともできます。
“hobby”:[“aaa”, “bbb”, “ccc”]を2次元配列にした場合は次のようになります。
配列の中に配列を記述する入れ子構造です。(ネストと呼びます)
{
"name":"轟",
"age":"27",
"hobby":[["aaa", "bbb", "ccc"],[111, 222, 333]]
}
以下と同じ。(値ごとに改行)
{
"name":"轟",
"age":"27",
"hobby":[
["aaa", "bbb", "ccc"],
[111, 222, 333]]
}
{
"name":"轟",
"age":"27",
"hobby":[
[
"aaa",
"bbb",
"ccc"
],
[
111,
222,
333
]
]
}
あまり改行が多いと見にくいですが、全く同じ内容です。
「”キー名”:”値”」の入れ子(ネスト)
「”キー名”:”値”」の値の部分にJSON形式の「”キー名”:”値”」を入れることもできます。
{"name":"轟", "age":"27"}
にJSON形式のデータを持つ子供のデータ"children":{"name":"Jon", "age":"5", "gender":"male"}
を追加する場合は以下のようになります。
{"name":"轟", "age":"27", "children":{"name":"Jon", "age":"5", "gender":"male"}}
{
"name":"轟",
"age":"27",
"children":{
"name":"Jon",
"age":"5",
"gender":"male"
}
}
データの深度に制限はないため、”children”の値の中に更に「”キー名”:”値”」を入れ込むこともできます。