Comparison with json

# This is a TOML document.

title = "TOML Example"

[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00 # First class dates

[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true

[servers]

  # Indentation (tabs and/or spaces) is allowed but not required
  [servers.alpha]
  ip = "10.0.0.1"
  dc = "eqdc10"

  [servers.beta]
  ip = "10.0.0.2"
  dc = "eqdc10"

[clients]
data = [ ["gamma", "delta"], [1, 2] ]

# Line breaks are OK when inside arrays
hosts = [
  "alpha",
  "omega"
]
{
  "title": "TOML Example",
  "owner": {
    "name": "Tom Preston-Werner",
    "dob": "1979-05-27T15:32:00.000Z"
  },
  "database": {
    "server": "192.168.1.1",
    "ports": [ 8001, 8001, 8002 ],
    "connection_max": 5000,
    "enabled": true
  },
  "servers": {
    "alpha": {
      "ip": "10.0.0.1",
      "dc": "eqdc10"
    },
    "beta": {
      "ip": "10.0.0.2",
      "dc": "eqdc10"
    }
  },
  "clients": {
    "data": [
      [ "gamma", "delta" ],
      [ 1, 2 ]
    ],
    "hosts": [ "alpha", "omega" ]
  }
}

두 형식을 비교해보면 기본적인 사용법은 파악할 수 있다.

기억해 둘 점들

  • 가급적이면 key를 쓸 때에는 따옴표를 적어주자.
    • 따옴표가 없다면 key에 사용할 수 있는 문자는 A-Za-z0-9_-로 한정된다.
k.ey = "value"      # error
"k.ey" = "value"    # ok

 = "value"    # error
"키" = "value"  # ok
  • multi line string은 python처럼 세 개의 따옴표를 사용한다.
str1 = """
Roses are red
Violets are blue"""
  • 여러 줄로 작성하지만, 한 줄로 인식하길 바란다면 \를 사용한다.
# The following strings are byte-for-byte equivalent:
str1 = "The quick brown fox jumps over the lazy dog."

str2 = """
The quick brown \


  fox jumps over \
    the lazy dog."""

str3 = """\
       The quick brown \
       fox jumps over \
       the lazy dog.\
       """
  • 긴 숫자를 알아보기 쉽게 세 글자마다 표시를 하고 싶다면 perl 언어처럼 _를 쓰면 된다.
int6 = 5_349_221
flt8 = 224_617.445_991_228
  • 배열을 작성할 때, 여러 줄로 표기한다면 마지막에 콤마를 넣어도 된다.
arr7 = [
  1, 2, 3
]

arr8 = [
  1,
  2, # this is ok
]
  • 테이블의 포함 관계는 .으로 표시한다
[servers]

  # Indentation (tabs and/or spaces) is allowed but not required
  [servers.alpha]
  ip = "10.0.0.1"
  dc = "eqdc10"

  [servers.beta]
  ip = "10.0.0.2"
  dc = "eqdc10"
  • 상위 테이블 내용이 없다면 일일이 계층을 명시하지 않고 생략해도 된다
# [x] you
# [x.y] don't
# [x.y.z] need these
[x.y.z.w] # for this to work
  • inline 테이블을 쓸 때에는 =을 쓴다.
name = { first = "Tom", last = "Preston-Werner" }
point = { x = 1, y = 2 }
animal = { type.name = "pug" }
  • 다음은 위의 inline 테이블과 같은 테이블이다.
[name]
first = "Tom"
last = "Preston-Werner"

[point]
x = 1
y = 2

[animal]
type.name = "pug"