不知道使用 yaml 有什么好处

2018-11-24 14:58:20 +08:00
 gino86

纯吐槽,现在越来越多的配置文件使用 yaml 格式,不知道有什么好处(结构更清晰?)
例如,ubuntu 的网络配置方式到 1804 之后就推荐使用 netplan,netplan 的配置文件就是 yaml 格式
ansible 可用的配置文件方式有两种,一种是 ini,另一种是 yaml,个人认为 ini 格式更加简短,使用 yaml 又(结)长(构)又(清)臭(晰),但 playbook 只能使用 yaml。
另外,yaml 好像不支持 tab,曾经就因为这个原因出过错,使用 vim 编辑就需要 set expandtab

13938 次点击
所在节点    程序员
78 条回复
trait
2018-11-24 15:28:41 +08:00
toml 好很多
AngelCriss
2018-11-24 15:29:41 +08:00
还有个东西叫 hocon,比 JSON 易读写
yyfearth
2018-11-24 15:36:57 +08:00
@gino86 YAML 只能和 JSON 比 毕竟都支持多层和数组结构 而且支持几种基本的数据类型
INI 这里就不太具备可比性了 因为 INI 本身不支持多层结构和数组 只能通过键名来模拟
如果有复杂结构 INI 写起来绝对比 YAML/JSON 痛苦

我一直觉得 YAML 就是 Python 版的 JSON 写起来稍微舒服一点 而且功能稍微强一点罢了
功能上来说 常见的也就是 XML 或者类似的标签语言更加强大一些 但是太难读写

你说的 INI “更加节省时间” 的前提是配置文件结构简单的前提下(没有层次或者只有一层) 否则不见得
其实楼上说的 TOML 其实就是一个高级版本的 INI 支持结构和数据类型 看起来并没有比 YAML 好到哪里去

另外 JSON 也有 JSON5 这么一个改进版
passerbytiny
2018-11-24 15:39:54 +08:00
ini 直观性最好,并且原生支持大量注释,对非专业人员来说比较友好。然而只有平铺的数据结构,程序解析麻烦(程序并不能将其方便的转换成对象),配置量大的时候也容易被注释淹没,总体来说可读性(尤其是对程序的开发者)并不高。

json 是最完美的配置方式,配置文件可以无缝的转换成程序使用的对象,但是非专业人员可能看不懂。

yaml 算是取了上面两个的中间点吧,即让它看起来跟程序使用的对象类似,又让非专业人员只需要几分钟学习就能看懂。

说到这里我也大致明白了,关键点就是,程序开发者使用方便,所以以后用 yaml 的非商业软件回更多。
glues
2018-11-24 15:44:44 +08:00
JSON 连注释都不能写,根本不配当配置文件用,ini 这种早该淘汰的东西,就不用再提了
YAML 最大问题是用缩进来控制结构

其实好的配置文件格式有很多,只是没流行起来
ichou
2018-11-24 15:51:00 +08:00
YAML 支持大段文本
autoxbc
2018-11-24 16:07:26 +08:00
因为我地摊语言 js 的流行,以后配置文件就是标准 es6 模块,内部各种函数计算引用继承装饰,对外导出接口
via
2018-11-24 16:21:44 +08:00
yaml 做配置很好的,但是传递数据还是用 json 比较好,yaml 写起来很舒服,不需要多余的花括号和引号逗号,但是需要注意一下格式,楼下怎么看?
lovelybear
2018-11-24 16:25:45 +08:00
Yaml 比 Json 格式简单,但又可以表达清晰的层次结构,而且 yaml 非常容易被构造和生成,无需任何第三方库
yanjinbin
2018-11-24 16:29:30 +08:00
toml 比 yaml 好很多,yaml 有几个规范反直觉
scofieldpeng
2018-11-24 16:37:47 +08:00
我的 github.com/scofieldpeng/config-go 最开始是管理配置 ini 的配置文件,然后当我想兼容 toml 和 yaml 的时候 gg 了,因为 ini 只能一层嵌套==
paragon
2018-11-24 16:44:58 +08:00
配置的时候万一有数组呢? 万一要注释呢?
1194129822
2018-11-24 16:56:22 +08:00
@lihongjie0209 json 并不适合机器和人读,取代 xml 只是因为轻量,其实 table[结构化]才是适合人和机器读
www5070504
2018-11-24 17:12:21 +08:00
ansible 的 yaml 让我想吐血 不过能跟 json 互转还行
lihongjie0209
2018-11-24 17:25:12 +08:00
@1194129822 JSON 不适合机读有什么证据吗?
passerbytiny
2018-11-24 17:26:12 +08:00
@1194129822 #31 错的离谱
0987363
2018-11-24 17:35:59 +08:00
用缩进控制逻辑的都是反人类😂 复制后用 vim 格式化一泡亏🤣
zjp
2018-11-24 18:21:25 +08:00
JSON 满屏的双引号看着就难受,还有末尾不用逗号导致删掉一行要改两行,实在不适合做配置文件。简单的用 ini 或者 properties,复杂的用 YAML
kaneg
2018-11-24 18:24:14 +08:00
Yaml 是 json 的超集,json 能表示的 yaml 都可以,反之不定。而同等内容的 yaml 对人类而言可读性就好很多,我在 puppet 和 ansible 之间做选择的时候就是因为 yaml 的易读而选择了 ansible。目前 yaml 流行,估计也与 ansible 和 kubernetes 流行有关。
zjsxwc
2018-11-24 18:27:22 +08:00
xml 表示我还活着

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/511095

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX