为什么我总觉得 yml 文件格式很奇葩 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
NoKey
V2EX    程序员

为什么我总觉得 yml 文件格式很奇葩

  •  
  •   NoKey 2019-04-12 10:0:19 +08:00 10348 次点击
    这是一个创建于 2375 天前的主题,其中的信息可能已经有所发展或是发生改变。
    从第一次见到 yml 文件到现在,我依然觉得这个文件格式很奇葩
    一直无法接受和使用这种文件格式
    58 条回复    2019-04-13 21:52:21 +08:00
    love
        1
    love  
       2019-04-12 10:50:06 +08:00
    我也是接受不了。
    而且复杂的细节还挺多。
    myyou
        2
    myyou  
       2019-04-12 10:51:17 +08:00   2
    的确奇葩,个人感觉 toml 更好
    NieKing
        3
    NieKing  
       2019-04-12 10:51:28 +08:00
    Flutter 里面还有 yaml 呢
    wc951
        4
    wc951  
       2019-04-12 10:52:17 +08:00 via Android
    为啥,因为缩进?
    wizardoz
        5
    wizardoz  
       2019-04-12 10:52:56 +08:00   1
    yaml 和 json 是对等的呀,你就认为是在编辑 json 好了。不过比 json 友好。
    wangxiaoaer
        6
    wangxiaoaer  
       2019-04-12 10:55:17 +08:00   1
    @myyou #2 +1,toml 那屎一样的嵌套,毫无可读性而言,真不知道是怎么起来的。
    ShareDuck
        7
    ShareDuck  
       2019-04-12 10:56:23 +08:00 via Android   1
    不喜欢缩进要求严格的格式。
    no1xsyzy
        8
    no1xsyzy  
       2019-04-12 11:00:32 +08:00   1
    如果不太复杂反而自己按需拓展的 INI 会更好。
    YAML 方便的就是这些解析器不需要自己拓展。
    另外,我觉得一个大问题是结构太松散导致眼 parse 费力,尤其是 array 套 object 时。
    bgm004
        9
    bgm004  
       2019-04-12 11:01:34 +08:00 via Android
    因为缩进问题。。忙活半小时
    mcfog
        10
    mcfog  
       2019-04-12 11:03:24 +08:00   1
    @wizardoz
    和 json 等价的部分只是 yaml 的一个子集,其实 yaml 是一个比 xml 还要复杂的格式
    wolfie
        11
    wolfie  
       2019-04-12 11:17:44 +08:00
    缩进 2 -> 4 就好了
    runze
        12
    runze  
       2019-04-12 11:21:00 +08:00
    yaml 过于复杂了,toml 相比之下简明很多。
    NoKey
        13
    NoKey  
    OP
       2019-04-12 11:21:48 +08:00
    properties 文件不好么,为啥我看现在开始流行 yml
    LuJason
        14
    LuJason  
       2019-04-12 11:23:26 +08:00   1
    @ShareDuck python 开发者 退出了群聊
    runze
        15
    runze  
       2019-04-12 11:25:53 +08:00
    NULL, Null, null, nil, Nil, ~, 留空

    在 yaml 里,以上哪些相当于 json 里的 null ?
    yanaraika
        16
    yanaraika  
       2019-04-12 11:26:43 +08:00
    格式简单,表达能力弱 <--------------------> 格式复杂,表达能力强

    ad hoc 格式(例如 linux 中的 resolv.conf), json, toml, yaml, code as config
    aaa5838769
        17
    aaa5838769  
       2019-04-12 11:27:40 +08:00
    k8s 也用到了 yaml,的确很麻烦,缩进一些问题。如果找个好点的文本编辑器,还可以过得去。
    wesnow
        18
    wesnow  
       2019-04-12 11:50:12 +08:00
    对于很多开源 Java 项目都用 yaml 觉得很奇怪,明明 properties 比 yaml 更易读更易写,为什么不用 properties?
    Phariel
        19
    Phariel  
       2019-04-12 11:53:41 +08:00 via iPhone
    说起 yaml 我就想起了 Jade 一个远古的 template engine
    http://jade-lang.com/

    异曲同工之妙。。。
    ansyx
        20
    ansyx  
       2019-04-12 11:58:03 +08:00 via Android
    不能用 tab 逼死个人
    hoyixi
        21
    hoyixi  
       2019-04-12 12:05:18 +08:00
    你知道 stylus 吗?
    trait
        22
    trait  
       2019-04-12 12:08:59 +08:00 via iPhone   1
    @wangxiaoaer toml 简直完美 没觉得难读
    whileFalse
        23
    whileFalse  
       2019-04-12 12:10:10 +08:00
    @mcfog 对,所以其实不用那些 feature 就好了。
    yaml 大部分用法还是代替 json 吧。
    abmin521
        24
    abmin521  
       2019-04-12 12:15:59 +08:00 via Android
    长配置 yaml 还是很爽的
    推荐阅读 https://linux.cn/article-10423-1.html
    @wesnow
    shawndev
        25
    shawndev  
       2019-04-12 12:18:56 +08:00
    看来因为 tab 吃亏的不止我一个……不过 json 也确实不太适合用于配置文件。目前看来微软使用的 ini 和苹果使用的 plist 还是比较好的选择
    shawndev
        26
    shawndev  
       2019-04-12 12:19:41 +08:00   1
    还是补充一句吧,plist 优于 json 在于可以注释,ini 优于 json 在于冗余信息少,而且直观
    lincanbin
        27
    lincanbin  
       2019-04-12 12:24:19 +08:00 via Android
    JSON 不支持注释,数组不支持,
    lincanbin
        28
    lincanbin  
       2019-04-12 12:24:36 +08:00 via Android
    数组不支持以,结尾
    jsthon
        29
    jsthon  
       2019-04-12 12:28:20 +08:00 via iPhone
    TAB 真的是害人不浅
    liuxey
        30
    liuxey  
       2019-04-12 13:08:11 +08:00
    properties
    wangxiaoaer
        31
    wangxiaoaer  
       2019-04-12 14:03:37 +08:00
    @wesnow #18 properties 默认不是 utf-8 编码,遇到中文就跪了
    version
        32
    version  
       2019-04-12 14:06:36 +08:00
    yml 兼容性好很多.
    json 配置.比较坑.特别是数组的那些配置.
    json 新标准很多人不知道.,不好统一和推广.或者识别..所以很多开源都推荐 yml 了.

    pm2 用 yml 靠谱点.json 配置容易环境变量参数不生效
    HangoX
        33
    HangoX  
       2019-04-12 14:07:28 +08:00
    properties 主要问题是长吧?阅读起来比较困难,json 主要是不好编辑,所以就出现了 yaml,编辑起来的确方便
    ojbkojbk
        34
    ojbkojbk  
       2019-04-12 14:15:23 +08:00
    yml 可读性高这一条就可以秒杀 properties
    icylogic
        35
    icylogic  
       2019-04-12 14:16:12 +08:00 via iPhone   1
    作为一个,人类易读,易写,同时可以支持比较复杂的配置和数据格式

    - yaml 用缩进真是太可怕了,我能接受 python 作为代码用缩进控制逻辑,但配置文件不应该这么搞。而且过于复杂。
    - json 噪音太多,没有标准注释
    - ini, conf 表达能力弱
    - xml 噪音太多,其他问题倒不大,可以勉强接受
    - 其他格式 太小众的个人项目 /没有一个大项目在用 /没有多语言比较成熟的 binding

    我选择 toml ……
    magicdawn
        36
    magicdawn  
       2019-04-12 14:40:08 +08:00
    好用啊
    btw prettier 也支持 yaml 了
    https://prettier.io/docs/en/index.html
    runze
        37
    runze  
       2019-04-12 14:43:21 +08:00
    jhsea3do
        38
    jhsea3do  
       2019-04-12 16:12:08 +08:00
    docker-compose / etcd 用 yaml 了很多年 已经习惯了
    rockyou12
        39
    rockyou12  
       2019-04-12 16:16:50 +08:00   1
    gradle 这种用代码来做 dsl 才配置文件的未来,可简单可复杂,又有无穷的表达能力
    biossun
        40
    biossun  
       2019-04-12 17:05:06 +08:00
    其实你需要的只是一个支持 yaml 语法检查的编辑器,甚至它可以自动帮你修复一些语法格式上的问题。
    test0x01
        41
    test0x01  
       2019-04-12 18:41:12 +08:00 via Android
    你只需要使用它的最基础的功能。是你自己把文件写那么复杂。人家只是复杂功能,不代表你一定要用啊。
    Varobjs
        42
    Varobjs  
       2019-04-12 19:20:38 +08:00 via Android
    个人觉得 yaml 比 json 好
    hantsy
        43
    hantsy  
       2019-04-12 19:26:53 +08:00
    Spring Boot 支持 YAML,除非简单几个属性的配置才用 properties,一般都是用 YAML 格式, 可读性好得多
    impl
        44
    impl  
       2019-04-12 20:10:54 +08:00 via Android
    Cargo.toml
    ww2000e
        45
    ww2000e  
       2019-04-12 21:11:42 +08:00
    更喜欢 yaml。。因为能注释
    guyujiezi
        46
    guyujiezi  
       2019-04-12 21:23:25 +08:00
    yaml 方便阅读
    anguiao
        47
    anguiao  
       2019-04-12 21:37:04 +08:00
    YAML 不管是手写还是阅读都还可以吧,起码比 JSON 好多了
    reus
        48
    reus  
       2019-04-12 22:12:01 +08:00
    toml 大法好
    omph
        49
    omph  
       2019-04-12 22:41:15 +08:00
    [JSON、XML、TOML、CSON、YAML 大比拼]( https://linux.cn/article-10664-1.html)
    crist
        50
    crist  
       2019-04-12 22:48:25 +08:00
    toml 大法好
    zengguibo
        51
    zengguibo  
       2019-04-13 00:27:52 +08:00
    反人类,没有工具根本编辑不了,多个空格都报语法错误
    iyaozhen
        52
    iyaozhen  
       2019-04-13 03:17:54 +08:00 via Android
    yaml 很好用呀,能注释,带基本数据结构
    格式要求严格才好,统一。Python 党很喜欢。
    Sparetire
        53
    Sparetire  
       2019-04-13 03:35:05 +08:00 via Android
    yaml 在不超过 30 行的配置里用起来很愉快,不需要像 json 那样带引号,且支持注释,但是更长的话人眼游标卡尺也是很累的。。大概和作者是 python 出身有关?
    toml 感觉挺好
    sunocean
        54
    sunocean  
       2019-04-13 09:57:15 +08:00
    只有我觉得,读起来很舒服吗? (尤其是读完 JSON 以后)
    arthas2234
        55
    arthas2234  
       2019-04-13 10:03:02 +08:00
    yaml 要配一个好一点的编辑器,不然很难受
    lrh3321
        56
    lrh3321  
       2019-04-13 10:38:29 +08:00 via Android
    习惯了以后觉得还凑合,至少比 xml 简洁多了。不过我还是更希望用 json
    www5070504
        57
    www5070504  
       2019-04-13 13:08:29 +08:00
    本 python 党特别不喜欢 yaml。。。
    fooofei
        58
    fooofei  
       2019-04-13 21:52:21 +08:00 via iPhone
    如果实现语言是 python 这样的解释型脚步语言,最好的配置文件应该是.py 文件这样同类型的,既能写注释,又能作为代码无缝使用。编译型语言就不适用这个规则了,才需要 toml 这样的配置文件。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2584 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 04:58 PVG 12:58 LAX 21:58 JFK 00:58
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86