Firebase Realtime Database からエクスポートした JSON を CSV に変換する


概要

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...")
}

使い方

  1. node.js の環境構築をする
  2. 任意のフォルダを作る
  3. 上記 js コードを JsonToCsv.js という名前で同じフォルダに配置
  4. 変換したい json ファイルを input.json という名前で同じフォルダに配置
  5. node JsonToCsv.js を実行する
  6. 変換された csv ファイルが output.csv という名前で出力される

まとめ

軽いコードを書こうと思ったときに node.js は意外と便利でした。