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と認識された 自分で何とかするよりライブラリを使ったほうが無難