Rubyのオブジェクト(Hashとか)をyamlフォーマットと相互変換するサンプル。
yamlファイルをIO::readなどで読み込んで文字列化したものを、YAML::loadに渡すとRubyオブジェクト化できる。
YAML::StoreでRubyのオブジェクトをyamlファイルとして保存できる。
以下、サンプルコード。
$ cat ./yamltest.rb
require 'yaml'
require 'yaml/store'
require 'pp'
class Hoge
attr_accessor :ha, :hb, :hc
end
obj = {
'a' => 'aaa',
:b => 'bbb',
'c' => [0, 1, 2],
'd' => {
'e' => 2.71828183,
:f => [true, false],
'g' => Time.now,
'h' => nil,
}
}
hoge = Hoge.new
hoge.ha = 'hahaha'
hoge.hb = { 'hb1' => 'heavy battle', 'hb2' => 'hard bbb!' }
hoge.hc = obj
# yamlファイルを出力
yamldb = YAML::Store.new('yaml.yml')
yamldb.transaction{|db|
db['obj'] = obj
db['hoge'] = hoge
}
# 生成されたyamlファイルの中身を出力
yamlstr = IO::read('yaml.yml')
puts '------------------------------'
puts yamlstr
# yamlファイルを読み込んでRubyオブジェクト化
yamlobj = YAML::load(yamlstr)
puts '------------------------------'
pp yamlobj
実行結果。
$ ruby ./yamltest.rb
------------------------------
---
obj: &id001
a: aaa
c:
- 0
- 1
- 2
d:
:f:
- true
- false
e: 2.71828183
g: 2011-04-01 16:55:47.299242 +09:00
h:
:b: bbb
hoge: !ruby/object:Hoge
ha: hahaha
hb:
hb1: heavy battle
hb2: hard bbb!
hc: *id001
------------------------------
{"obj"=>
{"a"=>"aaa",
"c"=>[0, 1, 2],
"d"=>
{:f=>[true, false],
"e"=>2.71828183,
"g"=>Fri Apr 01 16:55:47 +0900 2011,
"h"=>nil},
:b=>"bbb"},
"hoge"=>
#<Hoge:0x1003d7330
@ha="hahaha",
@hb={"hb1"=>"heavy battle", "hb2"=>"hard bbb!"},
@hc=
{"a"=>"aaa",
"c"=>[0, 1, 2],
"d"=>
{:f=>[true, false],
"e"=>2.71828183,
"g"=>Fri Apr 01 16:55:47 +0900 2011,
"h"=>nil},
:b=>"bbb"}>}
tags: ruby yaml
Posted by NI-Lab. (@nilab)