今回はJSONを解説します。
JSONとは、JavaScript Object Notationの略で、・・・と解説し始めるとどんどん複雑になります。
解説は以降の章に任せるとして、ここではそういったデータ形式があるとだけお伝えしておきます。
一体何に使うのかと思った方も多いでしょうが、これが以外と大事なんですよ。
JSONとは何か?
JSONとは何かを平たくいうと、名前からも分かるとおりJavaScriptと仲良しのデータ形式とでも覚えればだいじょうぶでしょう。
さらにデータ形式って何?といいますと、要はデータの表現方式とでも思ってください。
JSON以外に、XMLもデータ形式の1つといえば分かりやすいでしょうか。
まずは実際に見てください。
{ "生徒 太郎": { "生徒番号":1, "国語":65, "算数":70, "理科":80, "社会":50 }, "生徒 花子": { "生徒番号":2, "国語":80, "算数":90, "理科":100, "社会":95 } }
生徒太郎さんと生徒花子さんの、それぞれの属性(つまり生徒番号やテストの点数)をJSONで表現しました。
XMLとのちがい
仮にこのJSONをXMLで表現するとこうなります。
<students> <student> <生徒番号>1</生徒番号> <生徒名>生徒 太郎</生徒名> <国語>65</国語> <算数>70</算数> <理科>80</理科> <社会>50</社会> </student> <student> <生徒番号>2</生徒番号> <生徒名>生徒 花子</生徒名> <国語>65</国語> <算数>70</算数> <理科>80</理科> <社会>50</社会> </student> </students>
XMLを見れば、何となくJSONの特徴が分かってきたのではないでしょうか?
XMLと比較して閉じタグが不要なのにもお気づきでしょう。JSONの方がかなり楽に書けますね。
結局何に使うのか(WebAPI)
JavaScriptとの親和性を生かし、さまざまな箇所で活用できます。
特に重要なのがWebAPIとのデータ交換でよく使われることです。
イマドキのWebAPIでは、受信するデータの形式はXMLやJSON、HTMLから選べます。
実際にWebAPIからJSONでデータを取得してみましょう。
京都市オープンデータポータルサイトには、各種データのリクエストURLがあります。
この参考例のURLをそのまま使います。
https://data.city.kyoto.lg.jp/API/action/datastore/search.json?resource_id=f14b57c2-48dd-4aa7-b754-a4f4ac340f2d&limit=20&offset=5&fields=name,address
このアドレスを、ブラウザのURL欄にそのまま貼り付けてください。以下のような長い文字列が表示されるはずです。
{"help":"Search a datastore table. :param resource_id: id or alias of the data that is going to be selected.","success":true,"result":{"resource_id":["f14b57c2-48dd-4aa7-b754-a4f4ac340f2d"],"limit":20,"total":"1737","records":[{"name":"\u6771\u90e8\u307e\u3061\u7f8e\u5316\u4e8b\u52d9\u6240","address":"\u4eac\u90fd\u5e02\u5de6\u4eac\u533a\u9ad8\u91ce\u897f\u958b\u753a34-3"}, (以下略)
めまいがしそうな長い文字列が表示されました。
人間への可読性を残したといわれているJSONデータですが、これではさすがに読めません。
そんな場合は、JSONを整形してくれるサイトがありますので活用しましょう。その名もJSON整形です。
先ほどの長い文字列をすべてコピーし、JSON整形を開き四角の枠に貼り付けて、「整形」ボタンをクリックしてください。
[実行結果]
{ help: Search a datastore table. :param resource_id: id or alias of the data that is going to be selected. (string) ,success: true (boolean) ,result: { resource_id: [ f14b57c2-48dd-4aa7-b754-a4f4ac340f2d ] ,limit: 20 (number) ,total: 1737 (string) ,records: [ { name: 東部まち美化事務所 (string) ,address: 京都市左京区高野西開町34-3 (string) } ,{ name: 山科まち美化事務所 (string) ,address: 京都市山科区小野弓田町3 (string) } ・ ・ ・ ] } }
非常に見やすい形式に整形されました。
上部の複雑な部分はさておいて、records:以降を見てください。何となくイメージがつきませんか?
JSONの活用方法
結局何に使うのかなのですが、繰り返しになりますがJavaScriptとの親和性が高いことを活用します。
WebAPIから取得したJSONは、JavaScriptを使って簡単にHTML上に展開できます。ということは、毎回ページを開くたびにWebAPIから取得した新鮮なデータを、自分のページに展開できる、ということです。
今回は地味なデータをご紹介しましたが、これが株価やAmazon、楽天の購買データといったタイムリー性が求められるデータであれば、活用方法は無限です。
JSONの読み込み
本来であれば実際にWebAPIからデータを取得して・・・といきたいところですが、あまり派手な内容はJSONの解説としては不向きなので、前述した簡単な成績表を例に使いましょう。
WebAPIではなく、テキストファイルからのデータ読み込みをやってみましょう。
[再掲:成績表]
{ "生徒 太郎": { "生徒番号":1, "国語":65, "算数":70, "理科":80, "社会":50 }, "生徒 花子": { "生徒番号":2, "国語":80, "算数":90, "理科":100, "社会":95 } }
これを、成績表.jsonとして保存したのち、以下を実行します。
require 'json' File.open("成績表.json") do |file| hash = JSON.load(file) p hash end
[実行結果]
{"生徒 太郎"=>{"生徒番号"=>1, "国語"=>65, "算数"=>70, "理科"=>80, "社会"=>50}, "生徒 花子"=>{"生徒番号"=>2, "国語"=>80, "算数"=>90, "理科"=>100, "社会"=>95}}
JSONの内容が、ハッシュとして取得できました。
JSONの書き出し
今度は逆に、JSON形式でファイルに書き出してみましょう。
require 'json' File.open("成績表2.json", 'w') do |file| hash = {"生徒 太郎"=>{"生徒番号"=>1, "国語"=>65, "算数"=>70, "理科"=>80, "社会"=>50}, "生徒 花子"=>{"生徒番号"=>2, "国語"=>80, "算数"=>90, "理科"=>100, "社会"=>95}} str = JSON.dump(hash, file) end
[実行結果(成績表2.jsonの中身)]
{"生徒 太郎":{"生徒番号":1,"国語":65,"算数":70,"理科":80,"社会":50}, "生徒 花子":{"生徒番号":2,"国語":80,"算数":90,"理科":100,"社会":95}}
JSON形式で書き出すことができました。
まとめ
今回は、JSONとは何かという点に重点を置いたので、解説は少なめになりました。
みなさんの作るWebサイトに、WebAPIから取得した何らかのデータをあつかうときなど、JSONは避けて通れないものです。
本記事の内容はとても基礎的なことですので、ぜひマスターしておいてくださいね!