RubyでのJSONの書き込み

JSONファイルにRubyで書き込む

まずFile.openで書き込んでみる 標準入力からタブ切りテキストファイルを読み込んでJSONファイルに書き込む

require 'json'

people = Array.new
STDIN.each_line {|line|
  people << line.chomp.split("\t")
}

key = ["name","gender","age"]
ary = {}
people2 = []
people.each{|person|
  ary = [key,person].transpose.to_h
  people2 << ary
}

File.open("meibo.json","w") {|file| 
  file.puts people2
}
{"name"=>"john", "gender"=>"m", "age"=>"18"}
{"name"=>"paul", "gender"=>"m", "age"=>"20"}
{"name"=>"alice", "gender"=>"f", "age"=>"15"}
{"name"=>"dabid", "gender"=>"m", "age"=>"17"}
{"name"=>"jasmin", "gender"=>"f", "age"=>"17"}

meibo.jsonにそれっぽいものが書き込まれたがJSON形式かどうか以下のサイトで確認してみる jsonlint.com

結果

Error: Parse error on line 2:
{   "name" => "john", "gender" 
---------^
Expecting 'EOF', '}', ':', ',', ']', got 'undefined'

JSONとは認識されなかった

JSONライブラリを使って書き込んでみる

require 'json'

people = Array.new
STDIN.each_line {|line|
  people << line.chomp.split("\t")
}

key = ["name","gender","age"]
ary = {}
people2 = []
people.each{|person|
  ary = [key,person].transpose.to_h
  people2 << ary
}

File.open("meibo.json","w") {|file| 
  file.puts(JSON.generate(people2))
}
[{"name":"john","gender":"m","age":"18"},{"name":"paul","gender":"m","age":"20"},{"name":"alice","gender":"f","age":"15"},{"name":"dabid","gender":"m","age":"17"},{"name":"jasmin","gender":"f","age":"17"}]

再び確かめると

Valid JSON

JSONと認識された 自分で何とかするよりライブラリを使ったほうが無難