::: #toc
{{ toc }}
:::
Dead-Simple Object Notation (DSON) is a data interchange format intended to be intuitive, forgiving and human-readable. This standard is an attempt to define the simplest possible interchange format yet enough to describe complex nested structures.
{
'Is DSON simple?' = true, # Indeed
rules = [
"non-ASCII, control and whitespace
characters must be quoted",
]
}
Code point shortcuts used in the specification: {id=codepoints}
| Code point | Shortcut |
|---|---|
%x20 ( ) |
Whitespace |
%x0a (LF),%x0d (CR),%x0d.0a (CRLF) |
Newline |
%x2c (,) |
Comma |
A comment begins with %x23 (#), consists of zero (excluding #) or more code points and is terminated with a newline. {id=comments}
Whitespaces and newlines are ignored outside of quoted strings and comments.
A value is a string, an object or an array.
A DSON file may contain a single object or array.
A string consists of zero or more code points and may be either quoted (§4.4) or unquoted (§4.3). A string consisting of zero code points is considered empty.
Any code point in a string may be escaped by prepending %x5c (\). An escaped code point is considered a part of the string. The \ itself may be escaped as \\.
An unquoted string is a string consisting of code points in range %x21-%x7e, excluding the following code points unless escaped:
%x5b([);%x5d(]);%x7b({);%x7d(});%x2c(,).
An unquoted string is terminated with a comma.
An unquoted string is trimmed (i.e. whitespaces and newlines around it are removed). Therefore, an unquoted string consisting exclusively of whitespaces and newlines is considered empty.
A quoted string is a string wrapped in a pair of unescaped quotes, i.e. %x22 (") or %x27 (').
A multiline string is an unquoted string containing at least one newline.
A multiline string is aligned to the least-padded line, beginning from the second line.
A multiline string with the first line being empty has the first line ignored as if the string began from the second line.
A multiline string having a line ending with an escaped newline results in the following line appended to the previous one as if there was no newline.
An object begins with { and is terminated with }.
An object may contain zero or more comma-separated key-value pairs called object properties.
An object property key is a string.
An object property key must be unique within an object.
An object property key and value are separated with a single %x3d (=) code point.
Trailing commas are allowed, but can be omitted.
An array begins with [ and is terminated with ].
An array may contain zero or more comma-separated values.
Trailing commas are allowed, but can be omitted.
The following example is deliberately poorely formatted to demonstrate lenient-ness of the DSON format.
# The following DSON file contains # of settings
# for my program named "Foo"
{
# Log settings
log = { # This is a nested DSON object!
# Write into two streams (note
# how the whitespace is escaped)
path = ~/foo/bar.log\,\ $stdout,
'level' =info, # 'warn' is the default level
header= "
A log file
for my program\
named \"Foo\"
" # `···A·log·file\n··for·my·programnamed·"Foo"\n`
},
# File extensions to process
extensions=[
.jpg,
'.💩', # Must be quoted, as it contains a Unicode point
] ,
# A empty string
exclude = ,
# Also a empty string
ignore =
}