Rubyで
①CSVファイルとJSONファイルの読み込み
②読み込んだデータを用いてJSONファイルを変換
③変換したJSONファイルの出力
を行いたいです。
(データの変換メソッドはすでにあります)
例えば、
入力ファイルとして
test.csv
test.json
があり、出力ファイルとして
test_out.json
を出力したい時に
以下のコードをどのように書き換えれば良いでしょうか?
#!/usr/local/bin/ruby require 'json' require 'csv' class Converter attr_accessor :source, :pattern def convert source.each do |chunk| chunk['properties']['name'] = replace(chunk['properties']['name']) end end private def replace(str) if (result = pattern.find { |s| s[0] == str }) # 該当したので、置き換えるべき文字列を返す result[1] else # 該当するものがなかったのでそのまま str end end end converter = Converter.new converter.source = JSON.parse(<<"") [ {"type":"Polygon","properties":{"name":"札幌市"},"arcs":[[0,1,2,3,4,5]]}, {"type":"Polygon","properties":{"name":"旭川市"},"arcs":[[6,-6,7,8,9,10]]} ] converter.pattern = CSV.parse(<<"") 札幌市,id011002 函館市,id012025 小樽市,id012033 旭川市,id012041 puts converter.source # before converter.convert puts converter.source # after puts JSON.dump(converter.source)
以下のようにjsonファイルとcsファイルの中身を手作業でコピペして準備する、ということを避けたいのです。
(実際のjsonファイルの中身が数万行に及ぶため)
converter.source = JSON.parse(<<"") [ {"type":"Polygon","properties":{"name":"札幌市"},"arcs":[[0,1,2,3,4,5]]}, {"type":"Polygon","properties":{"name":"旭川市"},"arcs":[[6,-6,7,8,9,10]]} ]
converter.pattern = CSV.parse(<<"") 札幌市,id011002 函館市,id012025 小樽市,id012033 旭川市,id012041
以下がtest.jsonファイルの中身を表しており
(実際のjsonファイルの中身が数万行に及びます)
{"type":"Polygon","properties":{"name":"札幌市"},"arcs":[[0,1,2,3,4,5]]}, {"type":"Polygon","properties":{"name":"旭川市"},"arcs":[[6,-6,7,8,9,10]]}
以下がtest.csvファイルの中身を表しています。
札幌市,id011002 函館市,id012025 小樽市,id012033 旭川市,id012041
どのように書き換えれば実現できるか、ご存じの方がおりましたらどうぞ知恵をお貸しください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。