Ruby on Rails - Zipファイルを読み込む。Jsonを解析する。
先の記事と同様、タイトル通りのサンプルを作ってみました。
こちらもモジュールとしていたので、備忘録として載せておきます。
とはいっても、Zipファイルの読み込みは
ほぼ下記サイトを参考にさせて頂きました。
http://blawat2015.no-ip.com/~mieki256/diary/201312292.html
Gemfile
gem 'rubyzip'
モジュール
require 'zip'
require 'json'
require 'kconv'module ZipData
def self.read(file_path)
content = get_file_content(file_path)
json = JSON.parser.new(content)
return json.parse()
endprivate
def self.get_file_content(file_path)
bindata = {}
Zip::File.open(file_path) do |zipfile|
zipfile.each do |f|
name = f.name
size = f.size
next if name =~ /\/$/ # ディレクトリは除外
bindata[name] = zipfile.read(f.name)
end
endcontent = bindata[File.basename(file_path, '.zip') + '.json']
return content.toutf8()
end
end
gemはrubyzip 1.1.0を使いました。
バージョンにより、使用できるメソッドが異なっていたため
Gemfileでバージョンを指定してインストールする必要があるかもです。
ziprubyというgemもありますが、こちらはRuby2.0では使えないようです。
get_file_content()でzipファイルの中身を読み込んでいます。
読み込んだ中身を、toutf8()でutf-8形式に変換しないと
後続のjson.parse()が上手く行かないようです。
read()では、zipファイルの中身のjsonをjson.parse()でhashに変換して
返却しています。
ファイルの内容はhashになってしまえば、あとはhashオブジェクトの操作で
自由自在に扱うことができます。