俺のアウトプット

調べたこと、試したことを書きます

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": [
    "ボゴタ",
    "東京",
    "ダカール",
    "ワルシャワ"
  ]
}

参考