常见配置文件格式(yaml, toml, ini)

YAML格式

  • 文件名后缀一般是.yml

  • YAML是一个JSON的超集,意味着任何有效JSON文件也都是一个有效的YAML文件

  • 多个YAML配置可以在同一个文件中

    • 使用---表示一个文档的开始
    • 在一个文件中,可同时包含多个文件,并用---分隔
    • ...---配合使用,在一个配置文件中代表一个文件的结束
  • 大小写敏感

  • # 表示注释

  • 缩进

    • 缩进时不允许使用Tab键,只允许使用空格
    • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • 支持的数据类型

    • 对象
      • 一组键值对,使用冒号结构表示
    • 数组
      • -开头的行,构成一个数组
    • 纯量
      • 字符串,布尔值,整数,浮点数,NULL,时间,日期
        • NULL用~表示
        • 字符串默认不使用引号表示
          • 包含空格或特殊字符,需要放在引号之中
boolean: 
    - TRUE  #true,True都可以
    - FALSE  #false,False都可以
float:
    - 3.14
    - 6.8523015e+5  #可以使用科学计数法
int:
    - 123
    - 0b1010_0111_0100_1010_1110    #二进制表示
null:
    nodeName: 'node'
    parent: ~  #使用~表示null
string:
    - 哈哈
    - 'Hello world'  #可以使用双引号或者单引号包裹特殊字符
    - newline
      newline2    #字符串可以拆成多行,每一行会被转化成一个空格
date:
    - 2018-02-17    #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime: 
    -  2018-02-17T15:02:31+08:00    #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
  • 参考

    • ymal入门教程-菜鸟教程

    • ymal快速入门

INI格式

  • 一种非常原始的基础形式, 只适合非常非常简单的配置文件

  • 后缀名不一定是".ini",也可以是".cfg",".conf ”等

  • 没有固定的格式

  • 由若干个section 组成,每个section又由多个parameters组成

    • parameters格式:name = key
    • section格式:[section]
    • 注释格式:;
  • 最多只能一层嵌套,一旦需要两层嵌套,或需要数组,就力不从心了

TOML格式

  • 使用 # 作为注释

  • 支持整数、浮点数、字符串、布尔量、日期以及数组等数据类型

  • TOML是大小写敏感的

  • TOML文件必须是UTF8编码的

  • 允许缩进(Tab 和/或空格),不过不是必要的

  • TOML 文档最基本的构成区块是键/值对

    • 键名可以是裸露的,引号引起来的,或点分隔的
    • 裸键只能包含 ASCII 字母,ASCII 数字,下划线和短横线, 但是是被理解为字符串
    • 引号键允许你使用更为广泛的键名
      • 例如"ʎǝʞ" ,"127.0.0.1", "character encoding"
    • 点分隔键是一系列通过点相连的裸键或引号键。 这允许了你将相近属性放在一起
      • "物理属性"."颜色", "物理属性"."形状"
      • 等价于json中的"物理属性": { "颜色": "橙色", "形状": "圆形" }
  • 数组是内作为值的方括号

    • 子元素由逗号分隔,空白会被忽略
    • 子元素的数据类型必须一致
    • 数组也可以跨多行,此时最后一个值后面可以有终逗号
  • 表是作为键的方括号

    • 在它下方,直至下一个表或文件结束,都是这个表的键值对
    • 不能重复定义表
    • 不保证保持键值对的指定顺序
    • 表中可以用.表示层级
[dog."tater.man"]
type.name = "pug"

等价于

{ "dog": { "tater.man": { "type": { "name": "pug" } } } }
  • 表数组可以通过双方括号来表示
    • 各个具有相同方括号名的表将会成为该数组内的一员
    • 这些表的出现顺序就是它们的插入顺序
[[products]]
name = "Hammer"
sku = 738594937

[[products]]

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

等价于

{
  "products": [
    {"name": "Hammer", "sku": 738594937},
    {},
    {"name": "Nail", "sku": 284758393, "color": "gray"}
  ]
}
  • 参考
    • https://www.jianshu.com/p/f6ebb4df7785
    • https://zhuanlan.zhihu.com/p/53486477
    • https://yq.aliyun.com/articles/611301

你可能感兴趣的:(解放生产力)