今まで名前は知ってるけど具体的な書き方は知らなかったYAML。
とりあえずやってみる。
RubyでYAMLを読み込むのはすごい簡単にできる。
大体以下のような感じ
require 'yaml' obj = YAML.load("a") p obj
loadの引数に、YAMLの文字列かIOのオブジェクトを渡すとOK
まだ、YAMLの書き方知らないので"a"を渡しておいた。
今後長いものを書くと思うのでヒアドキュメントにしておくのが吉だろう。
配列
YAMLは配列とハッシュと数値・文字列・真偽値あたりでデータを表せる。
とりあえず配列から!
配列は以下のような感じに-で書く。
-の後は半角スペースがいる。
require 'yaml' obj = YAML.load(<<-EOS) - a - b - c EOS p obj
実行すると
["a", "b", "c"]
確かに配列だ!
さらに、半角スペースでインデントさせると配列の中に配列を入れ込める。
ちょっとやっかいなのが、-だけの行を作らないといけないってところかな
obj = YAML.load(<<-EOS) - a - - aa - ab - ac - b - - ba - bb - c - - ca - cb EOS p obj
実行結果
["a", ["aa", "ab", "ac"], "b", ["ba", "bb"], "c", ["ca", "cb"]]
これも確かに!!
-の後に半角スペース入れ忘れて5分くらいはまったorz
なやましい。
ハッシュ
次はハッシュ!
ハッシュは、キー: 値の形式で書く。:の後にはお約束の半角スペースがいる。
ってかインデントにTab使えないって何よ?
文句はおいといて実験
obj = YAML.load(<<-EOS) name: Tarou age: 12 EOS p obj
実行すると
{"name"=>"Tarou", "age"=>12}
うん。予想通り。
色々と入れ子も出来る。こんな感じに
require 'yaml' obj = YAML.load(<<-EOS) score: - 10 - 12 - 34 - 45 name: Tarou status: str: 12 int: 0 dix: 3 EOS p obj
実行結果
{"status"=>{"int"=>0, "str"=>12, "dix"=>3}, "name"=>"Tarou", "score"=>[10, 12, 34, 45]}
フロースタイル
今までやってきたのより楽な書き方があるってよ。
配列は[]で囲って, (カンマ+半角スペース)で区切る。ハッシュは、{}で囲ってキーと値の間は: (コロン+半角スペースね)で区切る。
ってことはこんな風にかけるんだ
require 'yaml' obj = YAML.load(<<-EOS) - {name: Tarou, score: [1, 2, 3, 4], param: {str: 10, int: 4}} - {name: Jirou, score: [4, 2, 3, 4], param: {str: 11, int: 3}} - {name: Saburou, score: [5, 2, 3, 4], param: {str: 12, int: 1}} EOS p obj
実行すると
[{"score"=>[1, 2, 3, 4], "name"=>"Tarou", "param"=>{"int"=>4, "str"=>10}}, {"score"=>[4, 2, 3, 4], "name"=>"Jirou", "param"=>{"int"=>3, "str"=>11}}, {"score"=>[5, 2, 3, 4], "name"=>"Saburou", "param"=>{"int"=>1, "str"=>12}}]
ちゃんとなってる。
コメント
#から後。
それだけ。
型
- 整数
- 12や3みたいなの
- 浮動小数点
- 1.2や3.141592みたいなの
- 真偽値
- true, false, yes, no
- Null
- null, ~
- 日付
- 2000-01-01みたいなの
- タイムスタンプ
- yyyy-mm-dd hh:mm:ss:[+-]hh:mmらしい
なが〜い文字列
複数行にわたる文字列も定義できる。
書き方は|や>を使う。
require 'yaml' obj = YAML.load(<<-EOS) - | aaa eee - > aiueo kakikukeko EOS p obj
実行結果
["aaa\neee\n", "aiueo kakikukeko\n"]
だと改行は改行のままで>だと改行は半角スペース! |
大体こんな感じかな?
の後に+や-や数字を指定することでも、ちょっと動きがかわるらしい。 |
とりあえず俺には必要性感じないからいいや。