TOML简介 (转)
TOML的由来
配置文件的使用由来已久,从.ini、XML、JSON、YAML再到TOML,语言的表达能力越来越强,同时书写便捷性也在不断提升。 TOML是前GitHub CEO, Tom Preston-Werner,于2013年创建的语言,其目标是成为一个小规模的易于使用的语义化配置文件格式。TOML被设计为可以无二义性的转换为一个哈希表(Hash table)。
例子
# 这是一个TOML文件
title = "TOML Example"
[owner]
name = "Lance Uppercut"
dob = 1979-05-27T07:32:00-08:00 # 日期是一等公民
[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true
[servers]
#你可以使用空格、制表符进行缩进,或者根本不缩进。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] ]
# 数组内可以混入换行符
hosts = [
"alpha",
"omega"
]
规范
- TOML是大小写敏感的
- TOML文件必须是UTF8编码的
- 空白符可以是制表符(0x09)或空格(0x20)
- 换行符可以是 LF (0x0A) 或 CRLF (0x0D0A)
TOML仍在不断完善,目前的版本0.4.0,下面是最新的规范。
注释
使用#来表示注释开始,至当前行尾结束。
# I am a comment. Hear me roar. Roar.
key = "value" # Yeah, you can do this.
字符串
TOML中有4种字符串表示方法:基本、多行-基本、字面量、多行-字面量。所有字符串必须是合法的UTF8字符。
基本字符串由双引号包裹,所有Unicode字符均可出现,除了双引号、反斜线、控制字符(U+0000 to U+001F)需要转义。
str = "I'm a string. \"You can quote me\". Name\tJos\u00E9\nLocation\tSF."
常用的转义序列:
\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)
\\ - backslash (U+005C)
\uXXXX - unicode (U+XXXX)
\UXXXXXXXX - unicode (U+XXXXXXXX)
多行-基本字符串由三个双引号包裹,除了分隔符开始的换行外,字符串内的换行将被保留。
str1 = """
Roses are red
Violets are blue"""
TOML解析器可以将其翻译为平台相关的字符串,如
# Unix上,上述字符串等同于
str2 = "Roses are red\nViolets are blue"
# Windows上,上述字符串等同于
str3 = "Roses are red\r\nViolets are blue"
在多行-基本字符串中可以在行尾使用\
来忽略其后的所有(换行符和空白符)直到第一个非空白符。
# 以下字符串等价
str1 = "The quick brown fox jumps over the lazy dog."
str2 = """
The quick brown \
fox jumps over \
the lazy dog."""
key3 = """\
The quick brown \
fox jumps over \
the lazy dog.\
"""
字面量字符串由单引号包裹,其内不允许转义,因此可以方便的表示基本字符串中需要转义的内容。
# What you see is what you get.
winpath = 'C:\Users\nodejs\templates'
winpath2 = '\\ServerX\admin$\system32\'
quoted = 'Tom "Dubs" Preston-Werner'
regex = '<\i\c*\s*>'
多行-字面量字符串与多行-基本字符串类似。
整数
int1 = +99
int2 = 42
int3 = 0
int4 = -17
为了增加可读性,整数可以使用_
分隔。每个_
必须被至少一个数字环绕。
不被允许的表达:前置0,2、8、16进制、无穷、NaN。 整数的范围是64bit signed long类型的范围。
浮点数
# fractional
flt1 = +1.0
flt2 = 3.1415
flt3 = -0.01
# exponent
flt4 = 5e+22
flt5 = 1e6
flt6 = -2E-2
# both
flt7 = 6.626e-34
浮点数的范围是64 bit double类型的范围。
布尔值
小写的true或false。
bool1 = true
bool2 = false
日期时间
使用RFC 3339描述的时间格式
date1 = 1979-05-27T07:32:00Z
date2 = 1979-05-27T00:32:00-07:00
date3 = 1979-05-27T00:32:00.999999-07:00
数组
数组使用方括号包裹。空格会被忽略,包括换行符。元素使用逗号分隔。注意,不允许混用数据类型(所有的字符串类型均为同一类型)。
arr1 = [ 1, 2, 3 ]
arr2 = [ "red", "yellow", "green" ]
arr3 = [ [ 1, 2 ], [3, 4, 5] ]
arr4 = [ "all", 'strings', """are the same""", '''type'''] # this is ok
arr5 = [ [ 1, 2 ], ["a", "b", "c"] ] # this is ok
arr6 = [ 1, 2.0 ] # note: this is NOT ok
表格
表格叶称为哈希表或字典,用来存储键值对。表格名由方括号包裹,且自成一行。
[table]
表格名下,直到下一个表格名或文件尾,均为当前表格的内容。
[table]
key = "value"
bare_key = "value"
bare-key = "value"
"127.0.0.1" = "value"
"character encoding" = "value"
"ʎǝʞ" = "value"
表格可以嵌套,即表格中某个键的值可以为表格。
[dog]
onekey = onevalue
[dog.tater]
type = "pug"
等价于
{
"dog": {
"onekey":"onevalue",
"tater": { "type": "pug" }
}
}
如果你不想的话,你不用声明所有的父表。TOML 知道该如何处理。
# [x] 你
# [x.y] 不需要
# [x.y.z] 这些
[x.y.z.w] # 可以直接写
表格数组
[[products]]
name = "Hammer"
sku = 738594937
[[products]]
[[products]]
name = "Nail"
sku = 284758393
color = "gray"
等价于以下的 JSON 结构:
{
"products": [
{ "name": "Hammer", "sku": 738594937 },
{ },
{ "name": "Nail", "sku": 284758393, "color": "gray" }
]
}
详细信息可以参考toml-lang/toml at github
转自:http://mlworks.cn/posts/introduction-to-toml/
TOML简介 (转)的更多相关文章
- TOML简介 (转) TOML的由来
TOML的由来 配置文件的使用由来已久,从.ini.XML.JSON.YAML再到TOML,语言的表达能力越来越强,同时书写便捷性也在不断提升. TOML是前GitHub CEO, Tom Prest ...
- 什么是TOML?
配置文件的使用由来已久,从.ini.XML.JSON.YAML再到TOML,语言的表达能力越来越强,同时书写便捷性也在不断提升. TOML是前GitHub CEO, Tom Preston-Werne ...
- Containerd 简介
我们可以把 docker 抽象为下图所示的结构(此图来自互联网): 从图中可以看出,docker 对容器的管理和操作基本都是通过 containerd 完成的. 那么,containerd 是什么呢? ...
- 【原创】大数据基础之Mesos(1)简介、安装、使用
Mesos 1.7.1 官方:http://mesos.apache.org/ 一 简介 Program against your datacenter like it’s a single pool ...
- python 本地配置文件库 Dynaconf 简介
[前言] 在项目中经常会遇到以下几种需要用到配置文件的场景: 相同的配置参数用在不同的代码中,如果需要调整,则需要手动将各个使用到的地方都相应调整. 密码等信息不想硬编码在项目文件中. 配置文件的格式 ...
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- REST简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
随机推荐
- WIN8.1侧边栏文件夹删除
1.注册表定位到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\ CurrentVersion\Explorer\MyComputer\NameSpace ...
- 《手把手教你学C语言》学习笔记(4)---代码规范
编程过程中需要遵守编译器的各种约定,例如以下代码: 1 #include <stdio.h> 2 3 int main(int argc, char **argv) 4 { 5 print ...
- 搞定linux的中文输入和vim
本篇是http://blog.csdn.net/guochaoxxl/article/details/53212090的姊妹篇,无论先操作哪一篇都可以: 1.一言不合先下载,链接: https://p ...
- Java使用apache的开源数据处理框架commons-dbutils完成增删改
主要使用这个开源jar包的QueryRunner类的update方法来完成数据库的增删改操作. package demo; import java.sql.Connection; import jav ...
- 双端队列-deque【集vector与list于一身的牺牲内存换功能完善】
看到双端队列(deque)了,书上是这样说的:除了栈和队列外还有一种限定性数据结构是双端队列:双端队列是限定插入和删除操作在表的两端进行的线性表:尽管双端队列看起来似乎比栈和队列更灵活,但实际上在应用 ...
- HDU 5997 rausen loves cakes(启发式合并 + 树状数组统计答案)
题目链接 rausen loves cakes 题意 给出一个序列和若干次修改和查询.修改为把序列中所有颜色为$x$的修改为$y$, 查询为询问当前$[x, y]$对应的区间中有多少连续颜色段. ...
- Java死锁及解决
Java线程死锁如何避免这一悲剧 Java线程死锁需要如何解决,这个问题一直在我们不断的使用中需要只有不断的关键.不幸的是,使用上锁会带来其他问题.让我们来看一些常见问题以及相应的解决方法: Jav ...
- POJ 1155 TELE [树状DP]
题意:略. 思路:用dp[i][k]来表示结点i给k个用户提供节目时的最大盈利(可能为负). 则递推方程为: dp[i][j] = max(dp[i][j], dp[i][m] + dp[v][j-m ...
- HTTP Range - [Web开发]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://minms.blogbus.com/logs/39569593.html 所谓 Range,是在 HTTP/1.1(htt ...
- 【IntelliJ IDEA】spring boot项目在idea实现自动部署
转载参考自:https://www.cnblogs.com/winner-0715/p/6666579.html spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能 ...