読者です 読者をやめる 読者になる 読者になる

WebEngine

web、プログラミング関係について書いていきます。あなたの優しい眼差しがブログの成長につながりますのでどうぞよろしく。

Node.jsでいろんな形式のデータを扱う

Node.js javaScript

注意事項

以下のファイルの文字コードはすべてUTF-8で実装しているので、Windows環境などでは、日本語が 文字化けする可能性があります。それらを踏まえた上で、テスト用のテキストなどに日本語 を使うことは避けていますが、やはり、環境によっては上手くいかないことがあることを ご理解ください。


対象となるデータ形式

  1. JSON
  2. XML / RSS
  3. CSV


1. JSON

javaScriptrといえばJSONですね。 下のようなdata.jsonを用意しました。

{                                                                 
  "title" : "-- programming --",
  "languages" : [
    {"id":1000, "name":"Java"},
    {"id":1001, "name":"Ruby"},
    {"id":1002, "name":"PHP"},
    {"id":1003, "name":"Python"},
    {"id":1004, "name":"JavaScript"}
  ]
}

そして、こちらが上のJSONファイルを読み込んだり、パースしたりする json_read.jsです。

var fs = require('fs');                                                             

var json_data = fs.readFileSync("data.json", "utf-8");
var obj = JSON.parse(json_data);

console.log(obj.title);
for (var i in obj.languages) {
  console.log(obj.languages[i].name);
}

node json_read.jsで実行すると、プログラミング言語がずらっと表示されるはずです。 非常に簡単ですね。

javaScriptのオブジェクトをJSONのデータに変換するには

var json_data = JSON.Stringify(obj);

とします。JSON.parse(json_data);と対になっていると考えると理解しやすいです。


2. XML / RSS

node.jsでXMLを扱うには、xml2jscheerioというモジュールを使います。
ここでは、jQueryライクにDOMへアクセスできるcheerioの方を使います。

cheerio

npm install cheerio

でインストールすることができます。

XMLは、data.xmlというファイルを用意しました。

<item>
  <name>pen</name>
  <price>120</price>
</item>
<item>
  <name>note</name>
  <price>150</price>
</item>
<item>
  <name>book</name>
  <price>540</price>
</item>

これを扱うファイルをxml_read.jsとして作成します。

var fs = require('fs'),
    che = require('cheerio');

var xml_data = fs.readFileSync("data.xml", "utf-8");
$ = che.load(xml_data);

$("item").each(function(i, el) {
  var name = $(this).children("name").text();
  var price = $(this).children("price").text();

  console.log(name + " : " + price);
});

node xml_read.jsと実行すると、モノと、その値段が表示されるはずです。
直観的にわかるかもしれませんが、cheerioモジュールのload()XMLファイルをパースしたものが、 $に入っています。そのあとは、jQueryのような構文で各要素の中身を取得していく感じになります。


3. CSV

node.jsでCSV形式のファイルを扱うにはcomma-separated-valuesというモジュールが要ります。

npm install comma-separated-values

でインストールできます。 以下はdata.csvになります。

ID, Name, Birthday
1000, Alice, 19990201
1001, Bell, 20010609
1002, Clara, 20001230

CSVファイルを扱うファイルが以下のcsv_read.jsです。

var fs = require('fs'),
    CSV = require('comma-separated-values');

var csv_data = fs.readFileSync("data.csv", "utf-8");
var data = new CSV(csv_data, {header:false});
var rec = data.parse();

for (var i = 0; i < rec.length; i++) {
  console.log(rec[i][0] + " : " + rec[i][1]);
}

node csv_read.jsで実行すると、IDと名前が表示されます。
1行目のヘッダ部分がいらない、という場合には、パース直後に、 rec.shift();と書けば、配列の先頭要素が削除されるので上手い具合になります。


まとめ

どのファイル形式を扱うにしても

  1. モジュールを読み込む
  2. fsのreadFileSync()を使ってデータを読み込む
  3. 読み込んだモジュールを使ってデータをパースする
  4. パースしたデータから必要な部分を取得したり、出力したりする

といった大まかな流れは変わりません。

また、基本的にnode.jsには便利なモジュールが多く、それらはほとんどnpmで取得できます。なにか行いたい 場合、先に使えそうなモジュールがないか調べるのも手であることを覚えておきましょう。


参考