JSON とは
JSON とは JavaScript Object Notation の略称で、日本語では「JavaScriptオブジェクト記法」と言います。
JavaScriptオブジェクト記法の名の通り、当初は JavaScript の為に制定されましたが、昨今ではJavaScriptだけでなく、データ構造の取り扱い用途で言語に依存せず幅広く活用されるようになっています。
JSONと似たようなデータ構造の仕組みにXML記法があります。その前には昔からCSV形式を用いてデータを扱っていましたが、CSVではデータの構造化には対応できないので、XMLが登場し、さらに構造化データをより扱いやすくするJSONが登場しています。CSV→XML→JSONという変遷の順序となります。
ただ、JSONができたのだからレガシーなCSVは要らないのかというと、そうでもありません。CSVは構造化データでないのであれば、とてもシンプルであり、データサイズも最も少ないので、Excelライクの表計算イメージの単純な縦横形式=配列的なデータ構造であれば、CSVで扱うことでマシンリソースに最適化させる事も可能です。
CSVでデータを持つか、JSON にするかは、それぞれ長所短所を踏まえて選定すれば良いのであり、なんでもかんでも JSON というものではありません。
JSON記法のポイント
JSONの成り立ちを学んだところで、この章では JSON 記法について学びたいと思います。
JSON記法のルールは至ってシンプルです。
まさにこれだけ、以下の2つを覚えてください。それで終わりです。
{ } 波カッコ(中カッコ)はオブジェクト:キーバリュー形式であること
[ ] 角カッコはリスト:キーバリュー形式でないこと
拍子抜けするくらいシンプルですね。
他のJSON解説では、要点を抑えていないものもあり、難解なイメージを持ったりしたでしょう。
ポイントは、キーバリュー形式であるや否やでカッコが2種類存在するだけなのです。
キーバリュー形式というのは、キー名と値が一対一のワンセットの形式のことで「名前は田中です」でひとつのキーバリュー「住所は東京都です」でひとつのキーバリューということです。
波カッコ(中カッコ)で括るとオブジェクトを示します。オブジェクトは必ずキーバリュー形式になります。
JSONのオブジェクト記法
JSONの構成要素にはオブジェクトとリストの二種類が存在します。まずオブジェクトの記法を学びましょう。
オブジェクトの例。名前は田中をオブジェクトにすると
{"name":"田中"}
となります。"name":"田中"のキーバリューの一対を波カッコで囲みます。
次にキーバリュー要素が複数ある場合、田中さんの住所は東京都を表すオブジェクトは
{"name":"田中","address":"東京都"}
となります。要素間はカンマで区切ります。ただこの横一行だとキーバリュー要素が増えてくると人間には読み難くなるので、読みやすいよう整形してみます。
{
"name":"田中",
"address":"東京都"
}
どうでしょう、それぞれキーバリュー要素を改行すると、ぐっと読みやすくなりますね。一行で詰め込んでも改行しても同じ意味として解釈されるので安心してください。
JSONのリスト記法
オブジェクトの次にここではJSONのリスト記法を学びます。
リストは羅列するだけで、キーバリュー形式にしてはいけません。
リストも要素間はカンマで区切ります。
リストの例(要素1つ)
["田中"]
リストの例(要素2つ)
["田中","佐藤"]
リストもオブジェクトと同様に改行してもしなくてもどちらでも構いません。ここでは読みやすいよう改行します。
正しい例(リストはキーバリューペアにしない)
[
"田中",
"佐藤"
]
このようにデータを単純に列挙するだけなのが角カッコで表すリストです。
オブジェクトとリストのミックス記法
ではオブジェクトとリストを学んだところで、それらを組み合わせて活用してみましょう。
[
{
"name":"田中",
"address":"東京都"
}
]
上例では一つのオブジェクトをリストに格納しています。
次に複数のオブジェクトをリストに格納してみると、
[
{
"name":"田中",
"address":"東京都"
},
{
"name":"佐藤",
"address":"大阪府"
}
]
となります。リストはあくまでもキーバリューペアではないので、オブジェクトを2つ格納しているだけです。
では角カッコと波カッコを逆にしてしまうとどうでしょう。
誤りの例
{[
"name":"田中",
"address":"東京都"
]}
上例は角カッコ=リストの要素がキーバリューペアになっている、かつ波カッコ=オブジェクトの要素がキーバリューペアになっていないという2箇所の誤りになっています。JSONとしては記述エラーです。
誤りの例
{{
"name":"田中",
"address":"東京都"
}}
これはどうでしょう?
内側の括りはキーバリューペアになっているので正しいものの外側の括りがオブジェクトなのにキーバリューペアになっていないので1箇所のエラーです。
正しい例
[[["田中"]]]
これはどうでしょう?
ネスト(階層)が深く冗長ではあるものの、記述的には正しいです。
リストのそれぞれのネストはキーバリューペアではありません。合格です。
では次のオブジェクトとリストのミックス例ですが、
{
"data": [
"田中",
"東京都"
]
}
もちろんこれも正しいJSON形式です。
オブジェクトはキーバリューペアになっていて、data要素はリストなので、データ内容が人間的には名前と地名が混合されているものの、JSON形式にはキーバリューペアになっていないので、リストも正しいということで合格です。
このように 「オブジェクトはキーバリュー、リストはキーバリューではない」 たったこれだけの基本ルールさえマスターすればJSONをマスターする事ができるのです。簡単ですね。
JSONの基礎講座でした。