Skip to main content

Surprising things about YAML

Published 3 min readMarkdown
💡
This is a legacy article

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!

No comments yet. Be the first to comment.