YAMLのブロックスタイルをJSONと比較して慣れる
JSON形式は馴染みがあるけれど、YAML形式はちょっと…の人いませんか?
俺です。
オンラインツール JSON to YAML を使って、JSONと比較しながら理解を深めていきます。
このツールはJSONを入力したらリアルタイムにYAMLに変換してくれますが、YAMLを入力してもJSONに変換してくれます。素晴らしい!
事前にテキストエリアをクリアしてください。
ハッシュ
オブジェクト、連想配列と言ったほうがわかりやすいかもしれません。
キー: 値
で定義します。
YAML
name: 山田太郎 age: 34 address: 埼玉県さいたま市
JSON
{ "name": "山田太郎", "age": 34, "address": "埼玉県さいたま市" }
半角スペースのインデントでハッシュのネストも可能です。
インデントにタブは使えません。半角スペース2個をインデントにする場合が多いです。
YAML
name: 山田太郎 age: 34 address: prefecture: 埼玉県 city: さいたま市
JSON
{ "name": "山田太郎", "age": 34, "address": { "prefecture": "埼玉県", "city": "さいたま市" } }
リスト
- 値
を必要な数だけ行単位に定義します。
YAML
- 東京都 - 神奈川県 - 千葉県 - 埼玉県
JSON
[ "東京都", "神奈川県", "千葉県", "埼玉県" ]
リストのネストも可能です。注意点としてハイフンだけの行がある点です。
YAML
- - 品川区 - 港区 - - 横浜市 - 川崎市
JAON
[ [ "品川区", "港区" ], [ "横浜市", "川崎市" ] ]
ハイフンだけの行がないと、1つの文字列として扱われます。
YAML
- 東京都 - 品川区 - 港区 - 神奈川県 - 横浜市 - 川崎市
JSON
[ "東京都 - 品川区 - 港区", "神奈川県 - 横浜市 - 川崎市" ]
スカラー
プリミティブな値の型です。JSONとYAMLを比較してみましょう。
型 | JSON | YAML |
---|---|---|
数値 | 整数、浮動小数点数 | 整数、浮動小数点数 |
文字列 | "値" | "値", '値', 他の型以外 |
真偽値 | true/false | true/false, yes/no, on/off |
日付 | yyyy-mm-dd, iso8601形式, 他 | |
Null | null | null, ~ |
数値
符号、16進数表記にも対応しています。
YAML
n1: 10 n2: 3.5 n3: 0xff n4: -8 n5: +230
JSON
{ "n1": 10, "n2": 3.5, "n3": 255, "n4": -8, "n5": 230 }
文字列
"" または '' で囲むと文字列になります。 引用符で囲まなくても、他のスカラに変換出来ない場合は文字列になります。
YAML
s1: 日本橋 s2: "秋葉原" s3: '神田' s4: "5" s5: 'true' s6: 8+2 s7: ''
JSON
{ "s1": "日本橋", "s2": "秋葉原", "s3": "神田", "s4": "5", "s5": "true", "s6": "8+2", "s7": "" }
真偽値
JSONが true/false のみなのに対し、YAMLは複数用意されています。大文字小文字関係ありません。
YAML
b1: true b2: false b3: yes b4: no b5: on b6: off b7: True b8: FALSE
JSON
{ "b1": true, "b2": false, "b3": true, "b4": false, "b5": true, "b6": false, "b7": true, "b8": false }
日付
JSONには日付型はないため、文字列として出力されています。 その他のフォーマットは 公式サイト を参照してください。
YAML
d1: 2018-07-08 d2: 2018-07-09 10:30:00
JSON
{ "d1": "2018-07-08", "d2": "2018-07-09 06:30:00 -0400" }
Null
チルダや値がない場合も null になります。
YAML
n1: null n2: ~ n3:
JSON
{ "n1": null, "n2": null, "n3": null }
応用
リストの中にハッシュ
YAML
- country: コロンビア capital: ボゴタ - country: 日本 capital: 東京 - country: セネガル capital: ダカール - country: ポーランド capital: ワルシャワ
JSON
[ { "country": "コロンビア", "capital": "ボゴタ" }, { "country": "日本", "capital": "東京" }, { "country": "セネガル", "capital": "ダカール" }, { "country": "ポーランド", "capital": "ワルシャワ" } ]
ハイフンで改行してハッシュを書いても問題ありません。
- country: コロンビア capital: ボゴタ - country: 日本 capital: 東京
ハッシュの中にリスト
YAML
countries: - コロンビア - 日本 - セネガル - ポーランド capitals: - ボゴタ - 東京 - ダカール - ワルシャワ
JSON
{ "countries": [ "コロンビア", "日本", "セネガル", "ポーランド" ], "capitals": [ "ボゴタ", "東京", "ダカール", "ワルシャワ" ] }