こんにちは。ソフトブレーンの松嶋です。
システム間のデータのやりとりをする中で、「JSON」と言った形式のデータを取り扱うことはよくありますよね。
あまりに当たり前に使い過ぎていたため、「使ったことあるけど、よく知らない」と言ったことも多いのではないでしょうか。※お恥ずかしながら、私自身のことであったりもします…。
なので、知識の整理も兼ねて、今回はJSONについて書いていきたいと思います。
JSONとは
JSONとはJavaScript Object Notationの略語でテキストベースのデータフォーマットです。
[
{
"id": 1,
"name": "ichiro",
"age": 30
},
{
"id": 2,
"name": "jiro",
"age": 25
}
]
上記のようなフォーマットはおなじみですね。正確な定義はhttps://tools.ietf.org/html/rfc8259に記載がありますが、文法に関しては要約すると、
1.JSONトークンは『 { } [ ] , :』と言う構造文字と文字列、数字、『true false null』のリテラルで構成すること
2.JSONはオブジェクトか配列で構成すること
のようなところがポイントになるかと言えるかと思います。
また、オブジェクトは
・1個以上の名前と値のペアがあること
・名前は文字列で、ダブルクォートで囲み、名前と値の間はコロンで区切ること
・前の値と次の値はコンマで区切る
・中括弧で囲むことと言ったルールがあり、下記のような記述になります。
{
"id": 1,
"name": "ichiro",
"age": 30
}
また配列は
・前の値と次の値はコンマで区切る
・角括弧で囲むこと
・配列の値は同じ型でなくても良い
と言ったルールがあり、下記のような記述になります。
["A","B",2]
非常にシンプルにデータ構造を記述することができると言うことがわかるかと思います。
JSONは実際にどう活用できるか
私の業務経験上、JSON自体はAjaxやREST APIなど通信で使用したり、設定ファイルなどで使用することが多かったと言う印象です。
また、特にAjaxを使用する場面では、バックエンドサーバへのリクエストに対してレスポンスをJSON形式で受けて後続処理を行うようなケースの実装が多くあり、そのような場合には下記にようにJSON.parse関数を使用して、JavaScriptオブジェクトに変換して使用するケースが多いです。
// 引数には上述のJSONをシリアライズして、処理実行
JSON.parse('[{"id": 1,"name": "ichiro","age": 30},{"id":2,"name":"jiro","age":25}]'
ここでJavaScriptオブジェクトに変換されるため、後続処理では、JSON文字列であったことは特に考えずに実装をすることができます。(当たり前ですね)
また、サーバサイドでもJavaであればJacksonと言ったライブラリ使用したり、PHPであればjson_decodeと言った標準の関数を使用したりすることで、簡単にJSONデコードができるため、システム間疎通で構造化されたデータのやりとりを行う場合でも、簡単に取り扱えたりします。
まとめ
今回は「いつも何気なく使っているものにあえて目を向ける」と言うことでJSONを選択しましたが、
シンプル故に無駄がなく、それ故に汎用的に使える技術になっているのだな、と改めて思い知らされました。
フロント、バックエンドの言語を問わず、パーサが用意されていることからも明白ですが、使いやすい技術であるため様々な場面で応用されているのもそのため、と言えるかと思います。
また、調べる中で、興味深かったのは、2001年にダグラス・クロックフォードさんがJSONを発見したと言うものでした。
データ構造をテキストで記載するルールと言う意味では、おそらく過去の人がいろいろ工夫をする中で、今のJSONの記法を見つけたと言う意味で、
「発見」と言う表現なのかと思いますが、まるで物理学の法則を発見したような画期的なものに思えたので、面白いなと思いました。
私もシンプルで普遍的な「発見」とどこかで出会えたらな、と思います。