Surprising things about YAML
YAML is one of the more popular data markup languages around. It is most often compared to JSON, which is ironic, because JSON is a subset of YAML. The appeal of YAML is clear: it allows very clear, very terse data descriptions. For those with an afternoon to kill, the YAML spec has a bunch of neat features.
This ain't JSON
...which means that yay we get comments! No explanation necessary.
---
# The next line will blow your mind
key: value # See!
Indicator characters
YAML nodes, apart from having content, can also have a tag property. Tags give the parser more information about the content, a common use being the node or content type. For example, using explicit indicators for the two following documents yields different results:
---
? key
: value
# This is equivalent to:
key: value
---
! key
: value
# This is equivalent to:
key
Tags are really helpful for declaring content types. The YAML spec offers ways to be more explicit:
---
string_value: !!str value
float_value: !!float 5
moar_float: !!float 2.2e-7
integer_value: !!int "5"
Split strings over multiple lines
Splitting content over multiple lines can make YAML much more readable. We can also control how the multi-line text is interpreted.
---
description: A depressed man suffering
from insomnia meets a strange soap
salesman named Tyler Durden.
# Fold content and ignore lines of indendation
key: >4
- hey
- donkey
# Equivalent to
key: "- hey - donkey\n"
DRY up that data
Software like Rails use a couple awesome features of YAML in their config files: Anchors, aliases, and hash merges.
---
# Establishes an anchor.
# Anchors can be referenced elsewhere in the document.
source: &DEFAULT
awesome:
- thing
- stuff
# Expands the content of the anchor into the alias.
sauce: *DEFAULT
# We can merge the keys from two hashes as well.
sriracha:
<<: *DEFAULT
cool: elon musk
Convenient values
The YAML node type definitions have a bunch of convenient ways to write data:
---
key: null # empty content
bool1: ON # true
bool2: off # false
float: NaN
float2: Infinity
Streams
A single string can have multiple documents within it. Parsers will commonly only return the first document on a stream, making YAML work well for streaming data applications.
---
document: one
...
---
document: two
...
---
document: three
...
Conclusion
These are just a few things that YAML can do out of the box. Thanks to the original YAML developers for making such an expressive way to serialize your data!