YAMLはJSONの(ほぼ)スーパーセットになっている

というのを最近知りました。

Rubyist Magazine - プログラマーのための YAML 入門 (初級編)

そもそも、YAMLブロックスタイルとフロースタイルがあり、フロースタイルの方がJSONと(ほぼ)互換するので、JSON is YAMLなのだそうです。(リンク先のRubyist Magazineでは、YAML is JSONというページにデッドリンクが残っていますが、多分逆でJSON is YAML。)

JSON is YAML, but YAML is not JSON - Eli Bendersky's website

ほぼ、というのは、YAMLの規格が何度かアップデートされてるのも一つの目的としてはJSONとの互換性を高めることだったりしたみたいで、微妙な差異がバージョンによってはあるみたい。(同じキーの複数回の出現を許すか許さないか、とか)

YAML Ain’t Markup Language (YAML™) Version 1.2

The primary objective of this revision is to bring YAML into compliance with JSON as an official subset.


ansibleのPlaybookでこんな感じで、{{}}でくくった変数を直接なにかの値にしてしまうと怒られるのもこのせいで、フロースタイルのディクショナリと解釈されてしまうからのようです。

- name: {{name}}

…というのを、書き残しておこうと思ったら、 YAML Syntax — Ansible Documentationに書いてありました。(でも残す。)