今回は、Node.jsからJSONデータを取得・パースする方法について学んでいきましょう!
JSONをNode.jsで扱いやすい形式にパースするには?
https.getやrequestを使ったGET通信の方法を学びたい
このような内容も含めて、本記事では以下のような構成で解説していきます!
- 【基礎】「JSON」とは?
- 【基礎】「https.get」によるJSON取得・パース
- 【実践】「request」によるJSON取得・パース
この記事で、JSONの取得・パース方法をしっかり学習してスキルアップを目指していきましょう!
「JSON」とは?
それでは、まず最初にJSON(JavaScript Object Notation)についての基本から見ていきましょう!「JSON」は、さまざまな情報をやり取りするためのデータ形式であり、軽量で単純な文字列のためサーバー間のデータ通信にも最適です。
JSONの中身はJavaScriptのオブジェクト形式のような構造をしていることから、特にJavaScript / Node.jsと親和性が高いというわけです。
本記事では、Node.jsからGET通信によるJSONデータの扱い方について学習できるように構成しています。ちなみに、JSONについて基本から応用技までを次の記事で体系的にまとめているので、こちらも合わせて参考にしてみてください!
「https.get」でJSONを取得する
この章では、「https」モジュールを使ったJSONの取得方法について見ていきましょう!主に、https.getメソッドの使い方やGET通信・JSONの取得・パースについて学んでいきます。
https.getの使い方
まずは、「https」モジュールの使い方から見ていきましょう!「https」モジュールは、HTTPS通信をNode.jsから簡単に構築できる基本的なモジュールになります。使い方としては、まずNode.jsから利用できるようにrequire()で次のように設定します。
var https = require('https');
これで、以降はhttpsを使って通信を行うことができるようになります。今回は、JSONでイベント情報を取得できる「ATND API」を利用してNode.jsから通信を行ってみましょう!
そこで、通信を行うURLとhttps.get()メソッドを次のように記述しておきます。
var url = 'https://api.atnd.org/events/?keyword_or=javascript&format=json'; https.get(url, function (res) { });
「url」にATNDのAPIを設定します。今回はJavaScript関連のイベント情報を取得できるようにキーワードを「javascript」に指定しています。そして、https.get()の引数に設定したurlとコールバック関数を指定すれば準備完了です!
https.getでGET通信を処理する方法
それでは、GET通信を行うサンプルプログラムを作ってみましょう!基本的に取得したJSONデータは、コールバック関数の「res(レスポンス)に格納されていくので「on()」を使って取得していきます。
var data = []; https.get(url, function (res) { res.on('data', function(chunk) { data.push(chunk); }).on('end', function() { var events = Buffer.concat(data); console.log(events); }); });
この例では、「res.on(‘data’)」で次々取得するデータを配列「data」にどんどん格納していきます。最終的にデータの取得が完了したら「res.on(‘end’)」内で、配列「data」の要素をすべて連結すればOKです。
基本的には、このような流れでJSONデータを取得していきます。
https.getでJSONをパースする方法
さて、取得したJSONデータはそのままだとNode.jsから扱いにくい形式なのでパースする必要があります。つまり、一般的なオブジェクト形式に変換することでNode.jsから操作しやすくするわけです。
これを簡単に実現するには「JSON.parse()」メソッドを次のように使います。
https.get(url, function (res) { res.on('data', function(chunk) { data.push(chunk); }).on('end', function() { var events = Buffer.concat(data); var r = JSON.parse(events); console.log(r); }); });
「res.on(‘end’)」内の処理に注目してください!配列「data」の要素を連結したあとに、JSON.parse()を実行していますよね?
これにより、一般的なオブジェクト形式に変換されるので例えば「r.events[1].event」のように記述するだけで情報を取得できるわけです。
ちなみに、httpモジュールについてさらに理解を深めたい方は、次の記事で体系的に学習できるので合わせて参考にしてみてください!
「request」でJSONを取得する
この章では、requestモジュールを使ったJSONの取得方法について見ていきましょう!主に、requestモジュールの使い方やGET通信・JSONの取得やパースについて学んでいきます。
requestの使い方
まずは、「request」モジュールの基本的な使い方から見ていきましょう!requestモジュールは次のコマンドで導入することができます。
$ npm install request
インストールできたら、require()を使ってNode.jsから利用できるようにしておきましょう!
var request = require('request');
これで、以降はrequestを使って通信を行うことができるようになります。
requestでGET通信を処理する方法
それでは、request()を使ってGET通信を行ってみましょう!最も基本的な使い方としては、request()の引数にオプションとコールバック関数を設定する方法です。まず、オプションには通信するURLと通信の[r[種類[/r]を次のように指定します。
var options = { url: 'http://api.atnd.org/events/?keyword_or=javascript&format=json', method: 'GET' }
この例では、ATND APIを使ってGET通信によるイベント情報の取得を行うように設定しています。次に、request()メソッドに作成したオプションとコールバック関数を指定します。
request(options, function (error, response, body) { console.log(body); })
コールバック関数の「body」に取得したJSONデータが格納されています。request()を使うと、非常にシンプルな記述だけでJSONデータを取得できるのが分かりますね。
requestでJSONをパースする方法
「body」の中に格納されているJSONデータは、そのままだと扱いづらいのでNode.jsから操作しやすいオブジェクト形式に変換してみましょう!方法はとても簡単で、オプションに「json: true」を追記するだけです。
var options = { url: 'http://api.atnd.org/events/?keyword_or=javascript&format=json', method: 'GET', json: true }
このように、「json」プロパティをtrueにするだけで取得したJSON形式のデータが変換されてオブジェクト形式として扱うことができます。わざわざJSON.parse()を使わなくてもいいので便利ですね。
request()メソッドについて、さらに詳しい使い方や応用技などを次の記事でまとめているので合わせて参考にしてみてください!
まとめ
今回は、Node.jsからJSONデータを取得・パースする方法について学習をしました。最後に、もう一度ポイントをおさらいしておきましょう!
- JSONはサーバーとデータをやり取りするのに最適な形式である
- https.get()ではJSON.parse()を使ってデータを変換することができる
- request()ではjsonプロパティをtrueにするだけでデータを変換できる
上記内容を踏まえて、ぜひ自分でもプログラミングに取り入れて活用できるように頑張りましょう!