XML vs YAML vs JSON

时间:2010-10-16 22:16:43

标签: xml perl json yaml

假设我从头开始一个项目,这不依赖于任何其他项目。 我想使用一种格式来存储feed,比如XML,因为XML不是唯一可用的格式,我想知道:为什么我应该选择其中一种呢?

我将使用perl。

'Feed'是产品的描述(名称,价格,类型,简短描述,最多120个字)。

10 个答案:

答案 0 :(得分:28)

如果不了解更多,我们无法真正回答这个问题。仅仅因为您目前还没有依赖任何其他项目,您是否可能在将来的某个时候与他们互动?如果是这样,他们更喜欢哪种技术?在BBC,我们有一些项目“仅限JSON”,只是为了发现想要访问我们的API的Java开发人员乞求我们提供一个简单的XML API只是因为他们有许多围绕XML构建的工具。他们甚至不关心命名空间,属性或其他任何东西;他们只是想要那些尖括号。

至于“存储信息”,我也不确定你的意思。您解释了Feed中的数据,但是您将对这些Feed进行哪些操作呢?解析他们?缓存并保留它们?把它们写成楔形文字片? :)

我听起来像你真正想要的是一个数据库,你希望将数据保存在那里,然后将其作为JSON / YAML / XML或任何你想要的格式进行序列化。我建议的是能够将数据拉出到Perl数据结构中,然后让“格式化程序”知道如何将该数据结构序列化为所需的输出。这样你就可以序列化到JSON,后来如果这还不够好,可以轻松切换到YAML或其他东西。实际上,如果其他人需要您的数据(单向数据往往没有用),他们可以要求JSON,YAML,XML等等。您拥有更大的灵活性,并且不会与您预先制定的决策联系在一起。

话虽这么说,我不知道你的系统,所以很难说正确的做法是什么。而且,JSON和YAML并不完全可以与XML互换。微妙的差异会让你感到沮丧。

答案 1 :(得分:22)

每个人都可以胜任。

JSON的优点是可以在JavaScript中进行超级简单的解析,但您可能不得不在其他语言中查找和引入库。

XML的优势在于更多语言捆绑了相关的库,对您提到的存储非常有用。因此,对于在“运动中”和“静止”中的不同系统进行传递是有价值的。

YAML拥有适用于所有语言的库,但在某种程度上不太常用,因此您更有可能需要查找和引入库。

答案 2 :(得分:18)

我认为XML已被其他人彻底解释过了。但是,YAML和JSON都是优雅的语言,它们并不像你初看起来那么相似。

部分particularities about YAML

  • <强>参考

    - person: &id002
        name:   James
        age:    5.0
    
    - person: *id001
    

    第二个人是一个与第一个人相等的关联数组。

  • 投放数据类型

    foobar: !!str 123
    

    foobar是“123”(类型字符串)。

  • 每个实施都不支持的不常见数据类型

    百科:

      

    特别有趣的是[...]集,有序地图,时间戳和十六进制。

因此,我认为JSON更简单。

JSON

的参数

不仅适用于JavaScript

虽然如果你不使用JavaScript,对你的应用程序使用“JavaScript Object Notation”似乎很愚蠢,但你应该真的考虑它,因为JSON中提供的数据类型可能是你语言中最常见的数据类型太

可读,即使空格是可选的

我认为JSON在经过美化后非常易读,这很容易做到。 YAML很难做到紧凑,因为它依赖于空白。当然,您应该依靠压缩来节省带宽。 YAML中的引用可能会节省几个字节,但它们会增加很多复杂性。如果你真的在处理大量数据以避免重复,那么我建议在另一个层面解决这个问题。甚至XML都不支持这种宏。

答案 3 :(得分:9)

如果您需要与您无法控制的系统进行互操作(XML Schema在这里是非常宝贵的),请选择XML,如果您要将数据广泛转换为文本,HTML或XML(尽管有仇恨,XSLT是无用的),如果如果您的数据需要人为可编辑,那么您的数据包含大量文本标记(尽管如此,可以根据模式验证的可编辑XML对于大量工作来说是一个非常好的工具),和/或如果您需要互操作使用XML的无数工具和技术。

如果你真的不能被上述任何一个打扰,请选择JSON。

如果你在一个有很多YAML支持的环境中工作,请选择YAML。

答案 4 :(得分:7)

我同意乔。例如,如果它是一个javascript应用程序;杰森将是一个强有力的候选人。就个人而言,我会和json一起去做任何事情,但这只是因为那是我最熟悉的。

答案 5 :(得分:7)

JSON将是我的选择。 JSON和YAML是轻量级的,易于入门(不需要正式的Schema)。 JSON使用得更广泛,并且与YAML之外的其他各种技术更兼容。例如,PHP有一个内置函数来解码或编码JSON,而不是YAML。 JavaScript当然只是喜欢JSON,因为它是有效JavaScript的严格子集。

答案 6 :(得分:6)

取决于您的需求。对于小巧轻便的应用程序,我个人认为XML过度使用:http://www.codinghorror.com/blog/2008/05/xml-the-angle-bracket-tax.html

在这种情况下,我更喜欢YAML。 与javascript交互使用json。 如果你真的需要定义自己的语法(读取:schema),那么xml就是它。非常强大,你必须决定你要做什么 - 否则你的问题太宽泛,无法给出明确的答案。

答案 7 :(得分:3)

如果数据没有分层或者数据散布在例如描述中 This product is great for <targetDemo/> who love it's <featureSet/>),您可能需要考虑逗号分隔值 CSV )或其他一些格式,例如制表符分隔。

这是旧学校,但它完成了工作,没有用一堆描述文本权衡你的文件。即,在XML中,每个Feed都有以下非值数据。

<feed name="" price="" type="" description=""/>

...与CSV形成鲜明对比:

"", , "", ""

如果需要,可以在顶部添加标题行以进行记录。

还有很多关于CSV的工具,从命令行实用程序(如awk)到GUI(如Excel)。

另一种选择,如果你真的不需要通过文本编辑器编辑数据但又不想部署更强大的数据库服务,那么SQLite将允许你执行RDBMS风格平面二进制文件上的CRUD操作。

答案 8 :(得分:1)

在没有互操作性问题的情况下,我认为其中没有太多内容。所有语言都有很好的图书馆;其中一些是内置的,有些则不是。这些库的Yur接口很窄 - 只是在数据访问代码中 - 所以如果有一个痛苦的API,即使这并不重要。

对我来说,JSON是最令人愉快的手工编辑,这是一个小小的优点。

YAML可以使用&amp; / *表示法处理非树数据结构。 XML和JSON都没有内置的方法来做到这一点。但是,您的使用不需要它。

答案 9 :(得分:0)

我认为xml适用于大数据,而json适用于不需要多维数组的小而不太复杂的数据。我可能错了。 ^^ 我只在谷歌应用引擎中看到yaml。在我看来,它非常适合存储应用程序的首选项和数据。