受講料が最大70%OFF 受講料が最大70%OFF

JSON形式で書かれた文字列をJavaScriptで利用するにはJSON.parseメソッドを使いますが、Rubyも同じです。RubyにもJSONクラスがあり、そこで定義されたparseメソッドを使って、JSONをRubyのオブジェクトに変換します。では、parseメソッドはどう使えばいいのでしょうか。

今回はRubyでJSONを利用したい方のために、JSONを取り込む際に利用するparseメソッドについて紹介します。

JSONをparseするとどうなる

最近JSONをparseする解説をネットでよく見かけるようになりました。JSONが気になっている方が多いかもしれません。しかし、そもそもJSONとは何か、またparseするとはどんなことかを知らないと、そのような記事を理解できません。

そこでまずは「JSONをparseする」とはどういうことかも含めて知りたい方に、JSONについて解説します。

JSONはJavaScriptのフォーマット

今回解説するJSONとは、JavaScript Object Notationの略で、そのまま日本語に翻訳すると「JavaScrptオブジェクトの表記フォーマット」です。主にWebブラウザによる非同期通信のデータフォーマットとして使われており、JavaScriuptを利用したプログラムでは必須のフォーマットと言えます。

なお名前にJavaScriptが含まれていますがシンプルな表現方法のため、多くのプログラム言語でも利用できるフォーマットです。もちろんRubyにもJSONを扱うためのクラスが用意されています。

parseするとは

英語のparseの意味は「解析する」です。そのためJSONをparseすると言えば、JSONに記述されたデータを解析することを意味しています。

なおプログラミング言語の関数やメソッドには英単語がそのまま使われているケースが多いのですが、このparseも英単語がそのままメソッド名として使われたケースです。

そしてJavaScriptでJSONを解析するのにparseメソッドが使えますが、RubyでもJSONを解析するのにparseが使えます。

RubyでJSONをparseするメリット

先ほどJSONはWebブラウザの非同期通信でよく利用されると説明しましたが、Ruby on RailsでJSONを生成し、Webブラウザに送信するケースが多いでしょう。しかし、複雑なデータでもシンプルに記述できるJSONは他の用途でも活用できます。

例えば、設定情報を記載そたテキストファイルをRubyのプログラムで利用する場合、JSONで書いておけば読みやすいうえ、Rubyのparse機能を利用してシンプルなプログラムを記述できます。

JSONクラスのparseメソッドの基本

次から、RubyのJSONライブラリに定義されているparseメソッドについて解説します。

parseメソッドの文法

parseメソッドは、引数でJSON形式の文字列をRubyのオブジェクトに変換して返すメソッドです。ただし、parseメソッドを利用するためにJSONライブラリを読み込まなければなりません。そのうえで下記の例のように使用します。

parseメソッドの基本的な使用例

require("json")
json = '{"No":3,"name":"Suzuki"}'
hash = JSON.parse(json)
p hash # {"No"=>1, "name"=>"Suzuki"} が表示される

上記のプログラムは変数jsonに格納されたJSONフォーマットのデータを、parseメソッドを利用してRubuのハッシュに変換する例です。JSONのキーと値のペアがハッシュとして変換されているので、Rubyのプログラムの中で利用できます。

シンボルを使ったハッシュに変換する

先ほどparseメソッドの基本的な使い方として文字列のキーと値で構成されたハッシュに変換する方法を紹介しましたが、オプションでシンボルを使ったハッシュに変換することも可能です。JSONの文字列に続いて「symbolize_names: true」を指定してください。

シンボルを使ったハッシュに変換する例

require("json")
json = '{"No":3,"name":"Suzuki"}'
hash = JSON.parse(json, symbolize_names: true)
p hash # {:No=>1, :name=>"Suzuki"} が表示される

階層の深さを制限する

JSONは、その構造上いくらでも階層を増やせます。しかしプログラムで処理する場合、ある程度の階層に制限しておかないとハッシュの変数に変換できません。具体的にはRubyのparseメソッドのデフォルトは19です。それより階層が深い場合はエラーになるので注意してください。

しかし、実際にはそれほど階層の深いデータが作られることはなく、誤動作等によって作られたデータかもしれません。そのような場合は、オプションで処理可能な階層の深さを制限できます。

例えば、階層の深さを5に制限し、それより階層が深い場合はエラーとして処理する場合、オプションに「max_nesting: 5」を指定してください。

JSONをparseする応用例

JSONが主に利用されるのはWebブラウザのJavaScriptを利用した非同期通信です。なお、非同期通信と言っても特別なアクセス方法が使われる訳ではありません。http接続のGETまたはPOSTで通信します。そのためRubyのURIモジュールとnet/httpライブラリを使えば簡単にJSONを取得できます。

次から、RubyのURIモジュールとnet/httpライブラリを利用して取得したJSONをparseメソッドを利用してRubyのオブジェクトに変換する例を紹介します。

Webで参照できるJSONを取り込む

データをシンプルに表現できるJSONはWebシステムとも相性が良いことから、特定のURLにアクセスするとJSONでデータを取り出せるサービスを作れます。そのため、そのようなサイトにRubyのプログラムからアクセスし、JSONで受け取った情報を活用したサイトを作ることが可能です。

具体的にはURIモジュールを利用して指定したURIからJSONを文字列として受けとり、その文字列に対してJSONのparseメソッドを適用してRubyのオブジェクトに変換します。

URIライブラリとJSONのparseメソッドを利用したRubyのプログラムの例

require 'json'
require 'uri'
require 'net/http'

uri = URI.parse(json_url)
json = Net::HTTP.get(uri)
result = JSON.parse(json)

この例では、変数json_urlに格納されたデータをJSONで提供するWebサイトにアクセスし、GETで文字列として変数jsonで受け取り、parseメソッドを利用してRubyのオブジェクトresultに変換しています。

URIのPOSTモードで受け取る

先ほどhttp通信のGETメソッドでJSONを受け取る方法を紹介しましたが、WebブラウザのJavaScriptではPOSTメソッドの非同期通信でJSONを受け取るケースの方が多いでしょう。RubyでもPOSTメソッドでWebサーバーをアクセスし、JSONを取得することも可能です。次にその例を紹介します。

require 'json'
require 'uri'
require 'net/http'

uri = URI.parse(json_url)
res = Net::HTTP.post_form(uri, post_data )
result = JSON.parse(res.body)

この例では、変数json_urlに格納されたデータをJSONで提供するWebサイトにアクセスし、POSTで送信する変数と値を格納したpost_dataを使ってPOSTメソッドで、変数jsonにJSONを受け取ります。そして、parseメソッドを利用してRubyのオブジェクトresultに変換しています。

まとめ

JSONはJavaScript用のデータ形式で、Webブラウザの非同期通信などでよく利用されているフォーマットです。そしてRubyもJSONをサポートしており、parseメソッドを利用すればJSONをRubyのオブジェクトに変換できます。

なお、今回応用例として紹介したように、RubyのHTTPアクセス機能を利用すればWebサーバーからJSONを取得し、それをRubyのプログラムでも利用できます。Webサーバーの動作チェックや自動で情報収集する仕組みなどでも利用できるので、ぜひうまく活用してください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。