YamlとJsonの比較

2020.01.26

YamlMemo

同じデータをYamlで記述した場合とJsonで記述した場合で比較しました。備忘録です。


目次
-

これは何

最近、AWSのCluodFromationやGithub Actions、Dockerの設定ファイルなど色々なところでYaml形式のデータを見かけることが多くなってきたので、 備忘録としてYaml形式で記述したデータとJson形式で記述したデータを比較しました。

なお、オンライン上でYamlとJsonを変換してくれるツールがあるので、実際に試しながら進めていくと理解が深まりやすいかと思います。

Best Online YAML Converter - Convert YAML Strings into JSON, XML, CSV

yamlとjsonを比較

コメントアウト

yaml
count: 3 # これはコメント

基本型

yaml
count: 3
name: "takigawa"
value: 3.2
boolean: true
json
{
  "count": 3,
  "name": "takigawa",
  "value": 3.2,
  "boolean": true
}

シーケンス

yaml
list:
  - 3
  - takigawa
  - 3.2
  - true
json
{
  "list": [
    3,
    "takigawa",
    3.2,
    true
  ]
}

マップ

yaml
map:
  name: "takigawa"
  value: 3.2
  boolean: true
json
{
	"map": {
		"name": "takigawa",
		"value": 3.2,
		"boolean": true
	}
}

配列の要素をマップにする

基本的にインデント位置が同じデータは同じキーに属すると考えてよい。

yaml
list:
  - name: "bobyama"
    value: 3.2
  - name: "takigawa"
    value: 3
    boolean: true
json
{
  "list": [
    {
      "name": "bobyama",
      "value": 3.2
    },
    {
      "name": "takigawa",
      "value": 3,
      "boolean": true
    }
  ]
}

jsonっぽい書き方もできる

yaml
list: ["takigawa", 3.2, true]
map: {name: "takigawa", value: 3.2}
json
{
	"list": [
		"takigawa",
		3.2,
		true
	],
	"map": {
		"name": "takigawa",
		"value": 3.2
	}
}

複数行にすることも可能っちゃ可能っぽい。

yaml
list: ["takigawa", 
    3.5, 
    true,
    fsdafs,
    fdsafd,
    null]
map: {name: "takigawa", 
    value: 3.2}

改行文字を含む文字列

yaml
name: |
  takigawa
  bobyama
description: >
  this
  is
  description
value: 3.2

key-valueのvalueを | で指定すると、インデントした後の文字列が実際のvalueとして扱われる。

json
{
	"name": "takigawa\nbobyama\n",
	"description": "this is description\n",
	"value": 3.2
}

マップやシーケンスは別名をつけて参照できる

yaml
map: &alias
  name: "takigawa"
  value: 3.2
  boolean: true
map2:
    data: *alias
list: &alias2
  - item1
  - item2
list2:
  - *alias2
json
{
	"map": {
		"name": "takigawa",
		"value": 3.2,
		"boolean": true
	},
	"map2": {
		"data": {
			"name": "takigawa",
			"value": 3.2,
			"boolean": true
		}
	},
	"list": [
		"item1",
		"item2"
	],
	"list2": [
		[
			"item1",
			"item2"
		]
	]
}

マップをマージする

yaml
map: &map
  name: takigawa
  value: 3.2
map2:
  name: bobyama
  count: 3
  <<: *map
json
{
	"map": {
		"name": "takigawa",
		"value": 3.2
	},
	"map2": {
		"name": "bobyama",
		"count": 3,
		"value": 3.2
	}
}

参考リンク

コメント

この記事のコメントを読み込み中です


投稿する

@
ログインしてコメントを投稿