YAML (YAML Ain’t Markup Language) is a human-readable data serialization language. Its syntax is simple and human-readable. It does not contain quotation marks, opening and close tag, or braces. It does not contain anything which might make it harder for humans to parse nesting rules. You can scan your YAML document and immediately know what’s going on.
YAML has some killer features which make it superior to other serialization formats.
Let me show you YAML’s power further with some examples.
Can you figure out what’s going on below?
------- # My grocery list groceries: - Milk - Eggs - Bread - Butter ...
The above example contains a simple list of groceries to buy, and it’s a fully-formed YAML document. In YAML, strings aren’t quoted and lists need simple hyphens & spaces. A YAML document starts with
--- and ends with
... but they are optional. Comments in YAML start with a #.
Indentation is key in YAML. Indentation must contain spaces, not tabs. And while the number of spaces required are flexible, it’s a good idea to keep them consistent.
YAML has two types of collections: lists (for sequences) and dictionaries (for mappings). Lists are key-value pairs where every value is on a new line, beginning with a hyphen and space. Dictionaries are key-value pairs where every value is a mapping contain a key, a colon and space, and a value.
# My List groceries: - Milk - Eggs - Bread - Butter # My dictionary contact: name: Ayush Sharma email: email@example.com
Lists and dictionaries are often combined to contain more complex data structures. Lists can contain dictionaries and dictionaries can contain lists.
Strings in YAML don’t need quotation marks. Multi-line strings are defined using | or >. The former preserves newlines but the latter does not.
my_string: | This is my string. It can contain many lines. Newlines are preserved.
my_string_2: > This is my string. This can also contain many lines. Newlines aren't preserved and all lines are folded.
YAML can have repeatable blocks of data using node anchors. The “&” character defines a block of data that later referenced using “*”. For example:
billing_address: &add1 house: B1 street: My Street shipping_address: *add1