CSVでファイルを保存するなら、jsonで保存する方が楽ということに気づいた
CSVでhashの値を保存する場合分解しないといけないじゃないですか?
めんどくさいですよね。
例えばこういうデータです。
class FooApi HEADER = %w(foo bar baz) def export CSV.open('foo.csv', 'w:utf-8', headers: HEADERS, write_headers: true, force_quotes: true) do |csv| results.each do |result| line = [ result[:foo], result[:bar], result[:baz] ] csv.puts line end end end private def results [ { foo: 1, bar: 2, baz: [1, 2] }, { foo: 3, bar: 4, baz: [3, 4] }, ] end end
これよりももっとカラムが増えることなんて多いですよ。
HEADERとか考えるのめんどくさいなって思いました。
そこでjsonで書き出せば何も考えなくていいことに気づきました。
def export FIle.open('foo.json', 'w') { |f| f.puts results } end
これで全てが終わります。
def import @x = open('foo.json') {|f| JSON.load(f)} end
JSONの場合、keyがStringになって嫌だ!ってことがあると思います。
そんな時のためのwith_indifferent_access
です。
ActiveSupport
頼みになりますが、これでアクセスできるようになります。
@x.map!(&:with_indiffrent)access)
もちろん、クライアントによってはjson
って何?ってお客さんも多いでしょう。
ただ、自分の作業やjson
の意味がわかる人なら、ガンガン使うべきだなって思いました。
以上です。