概要
Firebase Realtime Database で取得していたログを Excel で集計しようと思い、いざエクスポートしようとしたら JSON でしかエクスポートできないじゃん?ってなったので、エクスポートした JSON を CSV に変換する雑な node.js のコードをメモしておく。(改めて調べたら既存ライブラリがあったのでそちらでも良いのかもしれない)
少ししか調べていないが、Web インタフェースだけではなく SDK や CLI 経由でもおそらく JSON しか取得できない。
JSON -> CSV 変換コード
gist にも載せてる、無駄な処理が多いが結果はうまくいった。
https://gist.github.com/yakimelon/123cba8c227562ce141792908a4d9ecd
JsonToCsv.js
function replace(text) {
return text
// 余計な文字の削除
.replace(/(".*" : \{|\{|\}|".*" : |^ )/g, '')
// 1つのデータの塊を1列に変換
.replace(/",\r?\n/g, '", ')
// 半角スペースをすべて削除
.replace(/ /g, '')
// 行間のカンマとその行を削除
.replace(/"\r?\n,/g, '"')
// 行と行の間にある3つの改行を1つに変換する
.replace(/\r?\n\r?\n/g, '\n')
}
const fs = require('fs');
const text = fs.readFileSync("input.json", 'utf-8');
console.log(replace(text));
try {
fs.writeFileSync("output.csv", replace(text));
console.log("Success!");
} catch(e) {
console.log("Failed...")
}
使い方
- node.js の環境構築をする
- 任意のフォルダを作る
- 上記 js コードを
JsonToCsv.js
という名前で同じフォルダに配置 - 変換したい json ファイルを
input.json
という名前で同じフォルダに配置 -
node JsonToCsv.js
を実行する - 変換された csv ファイルが
output.csv
という名前で出力される
まとめ
軽いコードを書こうと思ったときに node.js は意外と便利でした。