【YAML】YAMLの基礎文法

YAMLの基礎文法に関するメモです。

下記の参考サイトをみて自分なりに必要な部分をまとめたものなので、
ちゃんと学びたい方は下記のサイトを参照することをお勧めします。

magazine.rubyist.net

シーケンス(配列)

YAMLでは配列のことをシーケンスと呼びます。
シーケンスはハイフン+半角スペースを連続して書くことで表現されます。

# ハイフン+半角スペースを連続して書くとシーケンス
- a
- b
- c

結果をjsonで表すと次のようになります。

[
  "a", 
  "b", 
  "c"
]

マッピング(辞書)

YAMLでは辞書のことをマッピングと呼びます。
マッピングは[キー名]: + 半角スペースを連続して書くことで表現されます。

A: a
B: b
C: c

これをjsonで表すと次のようになります。

{
  "A": "a", 
  "B": "b", 
  "C": "c"
}

シーケンスを入れ子にする

シーケンスを入れ子にするには次のように書きます。

- a
- b
-
 - c
 - d

これをjsonで表すと次のようになります。

[
  "a", 
  "b", 
  [
    "c", 
    "d"
  ]
]

マッピング入れ子にする

マッピング入れ子にするには次のように書きます。

A: a
B: b
C:
 1: c-1
 2: c-2

これをjsonで表すと次のようになります。

{
  "A": "a", 
  "B": "b", 
  "C": {
    "1": "c-1", 
    "2": "c-2"
  }
}

マッピングのシーケンス

マッピングのシーケンスは次のように書きます。

- A: a
  B: b
- C: c
  D: d

これをjsonで表すと次のようになります。

[
  {
    "A": "a", 
    "B": "b"
  }, 
  {
    "C": "c", 
    "D": "d"
  }
]

シーケンスのマッピング

シーケンスマッピングは次のように書きます。

A: 
 - a-1
 - a-2
 - a-3
B:
 - b-1
 - b-2

これをjsonで表すと次のようになります。

{
  "A": [
    "a-1", 
    "a-2", 
    "a-3"
  ], 
  "B": [
    "b-1", 
    "b-2"
  ]
}

YAMLでは型は自動判別されます。

書き方の例 判別される型
1 / 1,000 int
0.1 float
true・false / yes・no bool
"text" / 'text' string
~ / null null
2019-01-01 日付
2020-01-01 00:00:00 +00:00 タイムスタンプ

改行を含む文字列

改行を含む文字列は次のように書きます。

A: |
 line1
 line2
 line3

これをjsonで表すと次のようになります。

{
  "A": "line1\nline2\nline3"
}

アンカー・エイリアス

下記のように&[アンカー名]でアンカーを登録し、*[アンカー名]でそれを参照することができます。

- &test a
- b
- c
- *test

これをjsonで表すと次のようになります。

[
  "a", 
  "b", 
  "c", 
  "a"
]

アンカーはシーケンスやマッピングに対しても付けられます。

- a
- b
- &c
 - c-1
 - c-2
- *c

これを利用するとこんなことができます。

players: 
 - &profile1
  id: 1
  name: taro
  age: 21
 - &profile2
  id: 2
  name: hanako
  age: 18
currentPlayer : *profile1

jsonで表すと次のようになります。

{
  "players": [
    {
      "age": 21, 
      "id": 1, 
      "name": "taro"
    }, 
    {
      "age": 18, 
      "id": 2, 
      "name": "hanako"
    }
  ], 
  "currentPlayer": {
    "age": 21, 
    "id": 1, 
    "name": "taro"
  }
}

フロースタイルという書き方もある

上記の書き方をブロックスタイルと言います。
YAMLにはフロースタイルという書き方もあります。

ここでは深く触れませんが書き方はこんな感じです。

[A, B, C: c]

これをjsonで表すと次のようになります。

[
  "A", 
  "B", 
  {
    "C": "c"
  }
]

ちなみにブロックスタイルとフロースタイルを混在させることもできます。

簡単に試すためのサイト

YAMLの文法を簡単に試すには下記のサイトが便利だったので紹介します。
YAMLjsonpythonにパースしてくれます。

yaml-online-parser.appspot.com

参考

magazine.rubyist.net