溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

TOML用法

發(fā)布時間:2020-06-21 00:29:54 來源:網(wǎng)絡(luò) 閱讀:1078 作者:夢朝思夕 欄目:開發(fā)技術(shù)

GitHub 目前的新項目已經(jīng)轉(zhuǎn)用 CoffeeScript 了。CoffeeScript 比 JavaScript 要簡潔優(yōu)雅得多。同樣地,GitHub 也覺得 YAML 不夠簡潔優(yōu)雅,因此搗鼓出了一個 TOML。

TOML 的全稱是 Tom's Obvious, Minimal Language,因為它的作者是 GitHub 聯(lián)合創(chuàng)始人 Tom Preston-Werner 。

TOML 的目標(biāo)

TOML 的目標(biāo)是成為一個極簡的配置文件格式。TOML 被設(shè)計成可以無歧義地被映射為哈希表,從而被多種語言解析。

例子

title = "TOML 例子"

[owner]
name = "Tom Preston-Werner"
organization = "GitHub"
bio = "GitHub Cofounder & CEO\nLikes tater tots and beer."
dob = 1979-05-27T07:32:00Z # 日期時間是一等公民。為什么不呢?

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

[servers]

  # 你可以依照你的意愿縮進。使用空格或Tab。TOML不會在意。
  [servers.alpha]
  ip = "10.0.0.1"
  dc = "eqdc10"

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

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

#在數(shù)組里換行沒有關(guān)系。  
hosts = [
  "alpha",
  "omega"
]

TOML 是大小寫敏感的。

注釋

使用 # 表示注釋:

# I am a comment. Hear me roar. Roar.
key = "value" # Yeah, you can do this.

字符串

字符串和 JSON 的定義一致,只有一點除外: TOML 要求使用 UTF-8 編碼。

注釋以引號包裹,里面的字符必須是 UTF-8 格式。引號、反斜杠和控制字符(U+0000 到 U+001F)需要轉(zhuǎn)義。

"I'm a string. \"You can quote me\". Name\tJos\u00E9\nLocation\tSF."

常用的轉(zhuǎn)義序列:

\b - backspace (U+0008)
\t - tab (U+0009)
\n - linefeed (U+000A)
\f - form feed (U+000C)
\r - carriage return (U+000D)
\" - quote (U+0022)
\/ - slash (U+002F)
\ - backslash (U+005C)
\uXXXX - unicode (U+XXXX)
使用保留的特殊字符,TOML 會拋出錯誤。例如,在 Windows 平臺上,應(yīng)該使用兩個反斜杠來表示路徑:

wrong = "C:\Users\nodejs\templates" # 注意:這不會生成合法的路徑。
right = "C:\\Users\\nodejs\\templates"

二進制數(shù)據(jù)建議使用 Base64 或其他合適的編碼。具體的處理取決于特定的應(yīng)用。

整數(shù)

整數(shù)就是一些沒有小數(shù)點的數(shù)字。想用負數(shù)?按直覺來就行。整數(shù)的尺寸最小為64位。

浮點數(shù)

浮點數(shù)帶小數(shù)點。小數(shù)點兩邊都有數(shù)字。64位精度。

3.1415
-0.01

布爾值

布爾值永遠是小寫。

true
false

日期時間

使用 ISO 8601 完整格式。

1979-05-27T07:32:00Z

數(shù)組

數(shù)組使用方括號包裹??崭駮缓雎?。元素使用逗號分隔。注意,不允許混用數(shù)據(jù)類型。

[ 1, 2, 3 ]
[ "red", "yellow", "green" ]
[ [ 1, 2 ], [3, 4, 5] ]
[ [ 1, 2 ], ["a", "b", "c"] ] # 這是可以的。
[ 1, 2.0 ] # 注意:這是不行的。

數(shù)組可以多行。也就是說,除了空格之外,方括號間的換行也會被忽略。在關(guān)閉方括號前的最終項后的逗號是允許的。

表格

表格(也叫哈希表或字典)是鍵值對的集合。它們在方括號內(nèi),自成一行。注意和數(shù)組相區(qū)分,數(shù)組只有值。

[table]

在此之下,直到下一個 table 或 EOF 之前,是這個表格的鍵值對。鍵在左,值在右,等號在中間。鍵以非空字符開始,以等號前的非空字符為結(jié)尾。鍵值對是無序的。

[table]
key = "value"

你可以隨意縮進,使用 Tab 或空格。為什么要縮進呢?因為你可以嵌套表格。

嵌套表格的表格名稱中使用.。你可以任意命名你的表格,只是不要用點,點是保留的。

[dog.tater]
type = "pug"

以上等價于如下的 JSON 結(jié)構(gòu):

{ "dog": { "tater": { "type": "pug" } } }

如果你不想的話,你不用聲明所有的父表。TOML 知道該如何處理。

# [x] 你
# [x.y] 不需要
# [x.y.z] 這些
[x.y.z.w] # 可以直接寫

空表是允許的,其中沒有鍵值對。

只要父表沒有被直接定義,而且沒有定義一個特定的鍵,你可以繼續(xù)寫入:

[a.b]
c = 1

[a]
d = 2

然而你不能多次定義鍵和表格。這么做是不合法的。

# 別這么干!

[a]
b = 1

[a]
c = 2
# 也別這個干

[a]
b = 1

[a.b]
c = 2

表格數(shù)組

最后要介紹的類型是表格數(shù)組。表格數(shù)組可以通過包裹在雙方括號內(nèi)的表格名來表達。使用相同的雙方括號名稱的表格是同一個數(shù)組的元素。表格按照書寫的順序插入。雙方括號表格如果沒有鍵值對,會被當(dāng)成空表。

[[products]]
name = "Hammer"
sku = 738594937

[[products]]

[[products]]
name = "Nail"
sku = 284758393
color = "gray"

等價于以下的 JSON 結(jié)構(gòu):

{
  "products": [
    { "name": "Hammer", "sku": 738594937 },
    { },
    { "name": "Nail", "sku": 284758393, "color": "gray" }
  ]
}

表格數(shù)組同樣可以嵌套。只需在子表格上使用相同的雙方括號語法。每一個雙方括號子表格回從屬于最近定義的上層表格元素。

[[fruit]]
  name = "apple"

  [fruit.physical]
    color = "red"
    shape = "round"

  [[fruit.variety]]
    name = "red delicious"

  [[fruit.variety]]
    name = "granny smith"

[[fruit]]
  name = "banana"

  [[fruit.variety]]
    name = "plantain"

等價于如下的 JSON 結(jié)構(gòu):

{
  "fruit": [
    {
      "name": "apple",
      "physical": {
        "color": "red",
        "shape": "round"
      },
      "variety": [
        { "name": "red delicious" },
        { "name": "granny smith" }
      ]
    },
    {
      "name": "banana",
      "variety": [
        { "name": "plantain" }
      ]
    }
  ]
}

嘗試定義一個普通的表格,使用已經(jīng)定義的數(shù)組的名稱,將拋出一個解析錯誤:

# 不合法的 TOML

[[fruit]]
  name = "apple"

  [[fruit.variety]]
    name = "red delicious"

  # 和上面沖突了
  [fruit.variety]
    name = "granny smith"
向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI