はてだBlog(仮称)

私的なブログど真ん中のつもりでしたが、気づけばWebサイト系のアプリケーション開発周りで感じたこと寄りの自分メモなどをつれづれ述べています。2020年6月現在、Elasticsearch、pandas、CMSなどに関する話題が多めです。...ですが、だんだんとより私的なプログラムのスニペット置き場になりつつあります。ブログで述べている内容は所属組織で販売している製品などに関するものではなく、また所属する組織の見解を代表するものではありません。

JSONファイルをCSVレコードに変換

タイトルに書いただけでも間抜けな匂いがするが、そんなことをしたいなーというシチュエーションがあった。

特別素晴らしい技術というわけでもないし、ニーズがないからなのか、それほど難しくないからなのかはわからないが、ググってもほど良いものがなかったため、そのようなものを作成したのでした。

やりたいことをおおまかに整理すると、次のとおり。

  1. あるネストや配列などなどいろいろ詰め込まれているJSONファイルがある。実際は1ファイルではなく、それなりの件数。
  2. このファイルからあるプロパティをいくつかピックアップして、それをCSV形式で出力したい。
  3. ピックアップしたい項目はいくつかのパターンを試してみたいため、設定ファイルなどで外だしにしておきたい。
  4. 設定ファイルは、CSVに出力したいJSONのプロパティ名を「parent.child.grandchild」のように、上の階層からのドット区切りで指定する方式。

最初は、例えばrubyで、ハッシュに取り込んだJSONをpメソッドでプリティに出力できるなら、設定ファイルさえもいらないレベルではと思っていた。 なんだけどシンタックスのアヤで思いの他、そのままでは都合がつかないところが分かってきた。

ということで、JSONファイルがインプットになっているハッシュのプロパティに「parent.child.grandchild」のようなオレオレ(といってもJavaScript風ではある)形式の文字列を指定すると、その値を取得できるようなメソッドを作成。

FlatkeyHashProviderというやつの、#get_json_value_onちうのがミソである。

github.com

今思えば、rubyが全く読めない人に使ってもらうものでもないから、いっそのことハッシュにアクセスするrubyスニペットの文字列を変数にならべておき、evalメソッドを使う方式でも良かったかもしれない。 まあ、でもそれはそれでどこで「[」「]」を付けるかとかダブルクォートとかめんどくさいから、まあ今回の方はそれはそれで意味があったと思うことにする。