RubyとRailsを勉強して3ヶ月、Rubyだけで何か作ってみたくて仕事で使うテストデータを
増やすプログラムを書きました。
こんなJSONP形式データがあります。
callback({"status":"0","list":[{"code":"0001","name":"hoge夫","gander":"2"}]})
こんな風にlistの部分を増やします。
callback({
"status": "0",
"list": [
{
"code": "0001",
"name": "hoge夫",
"gander": "2"
},
{
"code": "0002",
"name": "hoge夫",
"gander": "2"
},
...
]
})
ソースです。(動作確認2.0系でしか試してません)
increment_json.rb
require 'json'
filename = ARGV[0]
unless filename && File.exist?(filename)
puts "ファイル名がありません。第一引数にファイル名を指定して下さい"
end
jsonp = "";
file = File.open(filename, "r")
file.each do |line|
jsonp = line
break;
end
tmp = jsonp.match(%r{\{.+\}})[0]
json = JSON.parse(tmp)
json.each do |key, value|
if key == "list"
#p value.size
#p value[0]
10.times do
data = value[value.size - 1].dup
code = data["code"].to_i
code += 1
data["code"] = "%04d" %code
value.push(data)
end
end
end
# 1行で出力したい時↲
puts "callback(" + JSON.generate(json) + ")"
# フォーマットされた状態で出力したい時
#puts "callback(" + JSON.pretty_generate(json) + ")"
使い方:
$ruby increment_json.rb sample_json.txt > aaa.txt
これだけです。
もっと汎用的にしたかったけど、listの部分が増えればよかっただけなので深追いはしてません。
こんな風に組むともっと簡単にできる、とかあればアドバイスお願いします。
Rubyって素晴らしい。