LoginSignup
6
6

More than 5 years have passed since last update.

Rubyでいろんなツール作ってみたかった(JSON)

Posted at

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って素晴らしい。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6