纯吐槽,现在越来越多的配置文件使用 yaml 格式,不知道有什么好处(结构更清晰?)
例如,ubuntu 的网络配置方式到 1804 之后就推荐使用 netplan,netplan 的配置文件就是 yaml 格式
ansible 可用的配置文件方式有两种,一种是 ini,另一种是 yaml,个人认为 ini 格式更加简短,使用 yaml 又(结)长(构)又(清)臭(晰),但 playbook 只能使用 yaml。
另外,yaml 好像不支持 tab,曾经就因为这个原因出过错,使用 vim 编辑就需要 set expandtab
1
salamanderMH 2018-11-24 15:02:47 +08:00
YAML (YAML Ain't Markup Language) is a human-readable data serialization language
|
2
gino86 OP @salamanderMH 不觉得它可读性好在哪里
|
3
lihongjie0209 2018-11-24 15:08:15 +08:00 2
同感
人类可读性的话用 DSL 机器可读性的话用 JSON |
4
zhangbohun 2018-11-24 15:09:04 +08:00 via Android 1
同感,很不直观
|
5
gino86 OP @lihongjie0209 就是。而且这种文件很容易写错
|
6
wly19960911 2018-11-24 15:12:19 +08:00 1
你不喜欢的就不够好吗,同理可以很多推论,我不喜欢 GO 语言,所以我认为 GO 不好,我不喜欢 python 的非 C 语法,所以我认为 python 不好。另外工具不会用,不会设置的错也归到语法上吗。
ini 那个格式,看样子只支持一层结构,数据结构变成树就没法处理了。 |
7
hsfzxjy 2018-11-24 15:13:05 +08:00 via Android
感觉 JSON 更易读
|
8
blankme 2018-11-24 15:13:12 +08:00
不仅可读性差,可写性也差(不支持 tab ),非常反人类。。。
|
9
ysc3839 2018-11-24 15:13:17 +08:00 via Android
相比 ini,yaml 解决了多行文本和数组的问题。
|
10
gino86 OP @wly19960911 反正编写这种文件的工作量更大,越是接触得多就越觉得没有优势
|
11
szq8014 2018-11-24 15:15:12 +08:00 1
这全是习惯而已吧,比如 java 里面包名一般都又臭又长,但是大家虽然吐槽但是还都遵守这样的规则,开发过程中如何在 navigate 中展示就有两种风格
上 hierarchy 下 flat,分别对应 java 两种常用的配置文件 properties 和 yaml 格式,喜欢哪种就用哪种 像 yaml 这样的需要配置复杂了才能展示其优点吧,配置项那么短的话好像没啥明显优势。 就像 python 包名那么短的话上面两种视图也没啥大的区别了。 INI 不怎么用,搭建 openstack 的时候用得比较多没觉得 ini 多先进呀 0.0 |
12
zhantss 2018-11-24 15:15:38 +08:00 via Android 2
yaml 存储数据的复杂度比 json 好,ini 就更低了
相对来说 yaml 的编写难度比 json 好一点,ini 当然最好写 主要是数据复杂度和人编写难度取一个平衡吧,playbook 复杂度需求还是挺高的 然后开发人员一般拍脑门决定配置文件,所以嘛。。。 |
14
Archeb 2018-11-24 15:16:38 +08:00
感觉 json 更好写...可能是因为我写多了
|
16
YaphetYin 2018-11-24 15:19:13 +08:00 via iPhone
Toml 编写就很简单,rust 用的就是这个
|
17
wly19960911 2018-11-24 15:19:20 +08:00
@gino86 #10 如果是 JSON 和 YAML 比,我还是认为 JSON 更好,如果是 INI,我认为比不了。
|
18
CRVV 2018-11-24 15:26:15 +08:00 3
YAML 好像是一个比较早出现的这种格式,看起来本来是想做得比 JSON 好写
因为出现得早,大家都在用 但是显然缺点太多了,我也觉得还不如 JSON,所以现在更多用 TOML 了 |
19
kslr 2018-11-24 15:27:10 +08:00
yaml 对于人类阅读性比 json 好
|
20
weixiangzhe 2018-11-24 15:27:17 +08:00 via iPhone
那就用 toml 吧 yaml 比较 json 也有好多吧, 不用找哪里多了少了都号,那个花括号漏了,不用加那么多的引号 可以注释
|
21
trait 2018-11-24 15:28:41 +08:00 via iPhone
toml 好很多
|
22
AngelCriss 2018-11-24 15:29:41 +08:00 via Android 1
还有个东西叫 hocon,比 JSON 易读写
|
23
yyfearth 2018-11-24 15:36:57 +08:00 1
@gino86 YAML 只能和 JSON 比 毕竟都支持多层和数组结构 而且支持几种基本的数据类型
INI 这里就不太具备可比性了 因为 INI 本身不支持多层结构和数组 只能通过键名来模拟 如果有复杂结构 INI 写起来绝对比 YAML/JSON 痛苦 我一直觉得 YAML 就是 Python 版的 JSON 写起来稍微舒服一点 而且功能稍微强一点罢了 功能上来说 常见的也就是 XML 或者类似的标签语言更加强大一些 但是太难读写 你说的 INI “更加节省时间” 的前提是配置文件结构简单的前提下(没有层次或者只有一层) 否则不见得 其实楼上说的 TOML 其实就是一个高级版本的 INI 支持结构和数据类型 看起来并没有比 YAML 好到哪里去 另外 JSON 也有 JSON5 这么一个改进版 |
24
passerbytiny 2018-11-24 15:39:54 +08:00 2
ini 直观性最好,并且原生支持大量注释,对非专业人员来说比较友好。然而只有平铺的数据结构,程序解析麻烦(程序并不能将其方便的转换成对象),配置量大的时候也容易被注释淹没,总体来说可读性(尤其是对程序的开发者)并不高。
json 是最完美的配置方式,配置文件可以无缝的转换成程序使用的对象,但是非专业人员可能看不懂。 yaml 算是取了上面两个的中间点吧,即让它看起来跟程序使用的对象类似,又让非专业人员只需要几分钟学习就能看懂。 说到这里我也大致明白了,关键点就是,程序开发者使用方便,所以以后用 yaml 的非商业软件回更多。 |
25
glues 2018-11-24 15:44:44 +08:00 3
JSON 连注释都不能写,根本不配当配置文件用,ini 这种早该淘汰的东西,就不用再提了
YAML 最大问题是用缩进来控制结构 其实好的配置文件格式有很多,只是没流行起来 |
26
ichou 2018-11-24 15:51:00 +08:00 via iPhone
YAML 支持大段文本
|
27
autoxbc 2018-11-24 16:07:26 +08:00 via iPhone
因为我地摊语言 js 的流行,以后配置文件就是标准 es6 模块,内部各种函数计算引用继承装饰,对外导出接口
|
28
via 2018-11-24 16:21:44 +08:00 via iPhone 1
yaml 做配置很好的,但是传递数据还是用 json 比较好,yaml 写起来很舒服,不需要多余的花括号和引号逗号,但是需要注意一下格式,楼下怎么看?
|
29
lovelybear 2018-11-24 16:25:45 +08:00 via Android 1
Yaml 比 Json 格式简单,但又可以表达清晰的层次结构,而且 yaml 非常容易被构造和生成,无需任何第三方库
|
30
yanjinbin 2018-11-24 16:29:30 +08:00 via iPhone
toml 比 yaml 好很多,yaml 有几个规范反直觉
|
31
scofieldpeng 2018-11-24 16:37:47 +08:00 1
我的 github.com/scofieldpeng/config-go 最开始是管理配置 ini 的配置文件,然后当我想兼容 toml 和 yaml 的时候 gg 了,因为 ini 只能一层嵌套==
|
32
paragon 2018-11-24 16:44:58 +08:00
配置的时候万一有数组呢? 万一要注释呢?
|
33
1194129822 2018-11-24 16:56:22 +08:00 via Android
@lihongjie0209 json 并不适合机器和人读,取代 xml 只是因为轻量,其实 table[结构化]才是适合人和机器读
|
34
www5070504 2018-11-24 17:12:21 +08:00
ansible 的 yaml 让我想吐血 不过能跟 json 互转还行
|
35
lihongjie0209 2018-11-24 17:25:12 +08:00
@1194129822 JSON 不适合机读有什么证据吗?
|
36
passerbytiny 2018-11-24 17:26:12 +08:00
@1194129822 #31 错的离谱
|
37
0987363 2018-11-24 17:35:59 +08:00 via Android
用缩进控制逻辑的都是反人类😂 复制后用 vim 格式化一泡亏🤣
|
38
zjp 2018-11-24 18:21:25 +08:00 via Android
JSON 满屏的双引号看着就难受,还有末尾不用逗号导致删掉一行要改两行,实在不适合做配置文件。简单的用 ini 或者 properties,复杂的用 YAML
|
39
kaneg 2018-11-24 18:24:14 +08:00 via iPhone
Yaml 是 json 的超集,json 能表示的 yaml 都可以,反之不定。而同等内容的 yaml 对人类而言可读性就好很多,我在 puppet 和 ansible 之间做选择的时候就是因为 yaml 的易读而选择了 ansible。目前 yaml 流行,估计也与 ansible 和 kubernetes 流行有关。
|
40
zjsxwc 2018-11-24 18:27:22 +08:00 via Android
xml 表示我还活着
|
42
kcats 2018-11-24 18:54:43 +08:00
只有我一个人觉得 JSON 更好?
|
44
beginor 2018-11-24 19:00:40 +08:00 via Android
我也觉得 yaml 适合配置,JSON 适合数据传输。 但是 yaml 格式不如 JSON 严谨 。
|
45
VDimos 2018-11-24 19:07:06 +08:00 via Android
我一直以为大家都觉得 yaml 好用,原来这么多人不喜欢
|
47
kcats 2018-11-24 19:11:48 +08:00
@beginor 我倒是觉得 JSON 不适合传输啊, 如果是为了效率的话, mp 或者 pb 都是不错的选择, 如果为了解耦的话, 任何一个自解释的结构都可以, 但是 json 太过于严格了
|
48
sunmonster 2018-11-24 19:45:06 +08:00
@azh7138m 之前就有看过相关的文章,现存的配置文件多多少少都有问题,json 最大的问题是不支持注释,xml 太臃肿,ini 太简单了,不支持多层次结构,相对来说 yaml 就好得多,还有 toml
|
49
lolizeppelin 2018-11-24 19:49:10 +08:00
机器需要个毛可读性
配置文件都是在考虑人的可读性 因为是给人看人改的 只给机器读的配置要考虑的是性能问题 yaml 也好 json 好都不适合层级过多的配置,因为层级过多人根本看不了 在少量配置的情况下 yaml 和 json 都优于 ini。 yaml 可读性么 json 差不多。但是 yaml 格式不容易写错 也容易排错,json 多了还有数不清楚括号的问题 openstack 这种海量配置的. 最好的方案就是 INI 以及加少层级 配合多文件 要是 yaml 能解决 openstack 也不会专门弄 cfg 库了 还有 ini 可以表达层级的...看看 openstack 里怎么做的就对了 总之,如果你配置文件有大量层级要表达....你需要重新设计配置文件了 |
50
kingcos 2018-11-24 20:02:39 +08:00
YAML 既然 AML,应该和 XML 比较吧。确实格式更加精简,JSON 不能注释确实麻烦一些,ini 用的不多。。
YAML 除了缩进来排版格式有时容易弄错,但感觉还是可以接受。。 |
51
lihongjie0209 2018-11-24 20:03:25 +08:00
@kcats 在 UNIX 编程的艺术 这本书中有关于 文本 和 二进制数据格式讨论, 建议看一下. 至于说 JSON 不适合传输, 那么常见的 JSON 载体 HTTP 更不适合传输了.
|
52
lihongjie0209 2018-11-24 20:03:55 +08:00
@lolizeppelin 我一直很困惑说这话的人: 机器可读性??
|
53
wweir 2018-11-24 20:12:52 +08:00 2
yaml 不适合写大的配置文件,层级到七八层以后,完全没法看。别问我怎么知道的,你试试手动写 k8s 的配置去。
目前,让我选的话,我一定会选 toml,以接近 ini 的表达方式,提供了强大的结构表达能力 |
54
jamesxu 2018-11-24 20:15:11 +08:00 via iPhone 3
最烦这种靠缩进区分结构的语言
|
56
br00k 2018-11-24 20:30:25 +08:00
最近配置换成 yml,感觉可读性是不错。转换成 json 看的时候,感觉就是一堆括号。。。
|
57
artandlol 2018-11-24 20:35:26 +08:00 via iPhone
k8s 就使用 yaml 作为配置文件,但遇到上万行的配置怎么办呢,aws 设计了一种专门的程序语言解决。具体什么语言忘了
|
58
jimrok 2018-11-24 20:44:02 +08:00
1. 能写注释 2. 支持层级结构. 3. 支持多值(数组) 4. 可以引用。
|
59
S9Yh4wIFsBG7jnE4 2018-11-24 21:35:00 +08:00
@szq8014 你这主题为啥是绿的
|
60
azh7138m 2018-11-24 21:53:19 +08:00 via Android
|
61
WispZhan 2018-11-24 22:10:04 +08:00 via Android
@lihongjie0209 不考虑嵌入式设备?
机器可读自然是考虑嵌入式系统可读,底层 C/Cpp 自然是更倾向二进制协议,自然有机器可读一说。 这世界上还是嵌入式设备多得多,自然考虑机器可读。 你们现在考虑的全是上位机,应用层。多考虑下其他场景 |
62
WispZhan 2018-11-24 22:18:02 +08:00 via Android
JSON 根本就不是作配置文件的料,楼上一堆说 JSON 配置的……连个注释都不是原生兼容的格式不配当配置。
用 JSON 配置的一般都是 js 系的,其他的语言用真的不讨好。 --- 要吐槽 yaml 又想用 ini,那就看 toml 啰。 --- 最无聊的就是一群吐槽 xxx 不合理的,存在即使合理。别人有别人用的理由,你不爽就自己造轮子。 --- 还有楼主说的不兼容 tab ……你把 tab(/t)换 indent 好不,要挑起圣战么? |
64
zhouzm 2018-11-24 22:42:43 +08:00
我个人主力编辑器是 vim,觉得 yaml 非常适合手写,并且有很好的可读性。
前面提到的 yaml 的问题主要集中在缩进,认为这样反面没有可读性。 1. 现在 2 格缩进已经趋向于主流,在这种情况下,多层级缩进对文本的可视影响不是很大。 2. terminal 环境下,vim 是主要的编辑器,vim 使用缩进对齐插件(例如 Yggdroot/indentLine),可以非常直观的看清楚数据的层级关系。 3. vim 可以很方便的进行块缩进操作,这样如果需要进行块节点转移是极其方便的,相比之下,json 格式要做类似操作则很繁琐。 以前我们的菜单是使用 json 格式保存,菜单项由于客户的要求,经常会进行重构,菜单项,菜单组经常会移来移去,手工编辑这个 json 非常痛苦,后来改成 yaml 格式后,再也没有这个烦恼,任他风雨来袭,我自岿然不动。 参见示例图,图中只显示了 2 级菜单,实际运行中会出现 3 级、4 级: https://i.loli.net/2018/11/24/5bf95fb13cbda.png 注意仔细看,yaml 格式并不是你们所想像的全是缩进哦。 |
65
wspsxing 2018-11-24 23:03:17 +08:00 1
ini, json, yaml, toml 都用过,
ini 太原始, json 没有注释,ps,最后一个逗号好烦。 yaml, 我因为缩进远离了 python, toml, 语法怪怪的, 可以写的 天外飞仙 还有一些乱七八糟的格式就不说了 最后感觉 json5 不错 , 支持注释, (数组,对象)最后一个逗号可选。。 |
66
feverzsj 2018-11-24 23:24:55 +08:00
因为对人而言方便,但是解析起来比 json 要复杂
|
67
janxin 2018-11-24 23:33:14 +08:00 via iPad
toml>yaml>>>json
yaml 的好处是厉害久宣传的多库也全,又不像 json 这么可读性差。相对来说 toml 就是年轻了点 |
68
zkeeper 2018-11-25 04:39:21 +08:00
我觉得吧, 如果 json 能出个扩展, 支持注释, 就十分完美了.
yaml 的问题是格式太容易出错, 不如 json 这么健壮, 毕竟空格缩进都是不可见的 |
69
killerv 2018-11-25 06:30:10 +08:00
感觉 ini 可读性没有那么好,没有层级概念
|
70
MonoLogueChi 2018-11-25 07:51:40 +08:00 via Android
@gino86 单层级的话,yaml 和 INI 基本上是一样的啊,你说更省时间是从哪里得到的结论啊
|
71
itskingname 2018-11-25 07:56:01 +08:00 via iPhone 1
@zkeeper json5
|
72
yurun 2018-11-25 08:47:40 +08:00
真的不喜欢 yaml
|
73
mattx 2018-11-25 12:13:49 +08:00
可视化方面, xml 感觉不错.
|
76
AX5N 2018-11-25 15:36:54 +08:00
yaml > ini > json
|
77
linxu 2018-11-26 19:56:41 +08:00 via Android
@wly19960911 段之间可以继承
|
78
szq8014 2018-12-05 09:06:13 +08:00
@shayang888 windows 个性化里面把颜色改了就行啊,这个颜色来自于一张壁纸
|