YAML格式加入Web标准有什么问题吗?

3

我认为YAML真的非常棒...

它优美、易读,语法巧妙...相比其他任何数据序列化格式都更好。 作为JSON的超集,我们可以说它更加精细,因此它的语言演变。

但是我看到一些不同的观点,比如:

  • YAML已经死了,
  • 不要使用yaml等等...

我根本无法理解这是基于什么,因为它看起来很好 :)

如果我们在网络上找一些成功的例子,比如Ruby on Rails,我们知道他们使用yaml进行简单配置,但有一件让我好奇的事情是为什么yaml没有成为像XML和JSON那样最常用的Web格式之一

以Twitter为例...为什么API不提供YAML格式的数据呢?

这样做有什么问题吗?

我们可以看到no-sql数据库的发展,比如couchdbmongo,都是基于json的,甚至还有一个很棒的项目叫做jsondb,看起来非常轻量级,绝对可以胜任工作。

但是当我用json编写数据结构时,我真的无法理解为什么不使用YAML。

所以我的一个担忧是,YAML有什么问题吗?

人们可能会说它很复杂,但是,如果你想要使用与json相同的功能,它绝对不是。你肯定会得到一个更漂亮的文件,并且没有麻烦。如果你决定使用更多的功能,它确实会变得更加复杂,但这就是事情的本质,至少你有选择使用它的可能性。

选择是否使用双引号来表示字符串的可能性是很棒的,使一切更加清洁、易读...好吧,你明白我的意思 :)

所以我的问题是,为什么YAML没有广泛地取代JSON

为什么它似乎不会被用于在线社区中的数据结构传输?

我所能看到的只是人们将其用于简单的配置文件,而不是其他方面...

请原谅我,因为我可能完全错了,可能正在进行一些非常大的项目,而我的无知使我无法成为其中的一部分 :)

如果有任何基于yaml的大型项目,我会很高兴了解

提前感谢


+close:建议迁移到Programmers.SE。 - Juliet
朱丽叶,我无法理解你的“关闭”请求,这与其他已经得到回答的主题一样存在于SO中。SE中的程序员网站被定义为“专业讨论软件开发的专业程序员的问答”,所以我对此不确定。 - zanona
你说 YAML 很棒,我就跟不上了。 :-) - Anthony Rutledge
@AnthonyRutledge,哈哈!谁知道,11年后,在缩进等许多隐形错误的困扰下,我竟然完全同意你的看法。至少现在我们有TOML了。 - zanona
5个回答

3

YAML使用的数据量比非格式化的JSON多。它非常适合需要人类自己编辑的文件,但如果你只是在传递数据,使用YAML会浪费带宽。

如果您需要解释:UTF-16中每个空格占两个字节。YAML使用空格进行缩进,换行符用于嵌套。

以这个例子为例:

foo:
    bar:
        - foo
        - bar

这需要44个字符(包括换行符)。相应的JSON只需要29个字符:
{"foo":{"bar":["foo","bar"]}}

如果你对 YAML 进行 URL 编码,会变成 95 个字符:

foo%3A%0A%20%20%20%20bar%3A%0A%20%20%20%20%20%20%20%20-%20foo%0A%20%20%20%20%20%20%20%20-%20bar

与此同时,JSON 只变成了 64 个字符:
%7B%22foo%22%3A%7B%22bar%22%3A%5B%22foo%22%2C%22bar%22%5D%7D%7D

在上面的示例中,将YAML从JSON转换后进行URL编码,大小增加了一倍以上。而且我敢肯定,你可以想象出,你的YAML文件越长,这种差异就会越来越大。
哦,还有一个不使用YAML的理由:stackoverflow.com不支持YAML语法高亮显示!(当然,我会说YAML如此美丽,以至于它不需要语法高亮显示。我认为这是YAML的意义所在。)

3
我可以将你的示例写成 foo: {bar:[foo, bar]} - Konrad Borowski

3

并不是说YAML有什么问题,只是在很多情况下它并没有提供令人信服的优点。YAML基本上是JSON的超集。对于大多数用途,JSON已经足够了——即使拥有完整的YAML解析器,人们也不会使用高级的YAML功能——而且它与JavaScript的紧密联系使其很好地融入了Web开发人员正在使用的技术中。

简而言之:人们已经使用了他们需要的YAML。在大多数情况下,那就是JSON。


感谢 @Chuck,是的,在考虑了一下后,似乎这确实是真正发生的事情,人们并没有使用和实际上可能不需要完整的YAML API,只有JSON非常适合。 YML相对于JSON的一个巨大优势是语法更加清晰,但由于它们在大多数情况下仍然通过程序阅读并生成,因此这可能不是一个大问题,而您可以简单地编写yml,转换为json并发送到程序,反之亦然。所以我必须同意你的看法,谢谢 :) - zanona

2
在Ruby中,很多人认为配置应该使用Ruby而不是YAML。这样可以节省解析阶段,意味着您不必学习新的语法,并且在动态生成YAML内容(Rails fixtures)时不会到处出现ERB标记。
就个人而言,我也同意这种观点,无法看到YAML在网络传输方面提供了什么价值,使其比JSON更值得考虑。

3
使用完整的编程语言作为配置语言是很危险的 - 如果您使用eval()函数来读取它,那么某人可以轻易地编写一个安全风险的配置文件。 - Paddy3118

1

YAML存在一些问题,有一篇很好的文章YAML:可能并不那么出色。除了其他答案中已列出的问题外,简要总结如下:

  • 除了简单和短小的事物之外,不易阅读
  • 默认情况下不安全
  • 存在可移植性问题
  • 非常复杂,具有许多令人惊讶的行为

0

我曾经考虑过使用YAML,但从未实施。原因总是与缩进的空格有关。虽然我个人很喜欢这种方式,但即使对我来说,这听起来也像是在自找麻烦,因为

  • 肯定会有人犯错,没有想到改变空格会破坏文件。有时候,一个对语言/格式一无所知的人必须去文件中更改一个数字或字符串。
  • 您无法保证每个人都在任何地方都正确配置了比较/合并/SC软件以捕获空格或空行差异。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接