XML vs YAML vs JSON

sno*_*kin 26 xml perl json yaml

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

我将使用perl.

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

Ovi*_*vid 29

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

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

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

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

  • +1"你真正想要的是一个数据库" (8认同)

Jos*_*Fox 23

每个人都会做这个工作.

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

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

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


Jan*_*sen 20

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

关于YAML的一些特殊性

  • 参考

    - person: &id002
        name:   James
        age:    5.0
    
    - person: *id001
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 转换数据类型

    foobar: !!str 123
    
    Run Code Online (Sandbox Code Playgroud)

    foob​​ar是"123"(类型字符串).

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

    维基百科:

    特别有趣的是集合,有序映射,时间戳和十六进制.

因此,我认为JSON更简单.

JSON的一个参数

不只是JavaScript

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

即使空格是可选的,也是可读的

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


Rob*_*ney 10

如果您需要与您无法控制的系统进行互操作(XML Schema在这里是非常宝贵的),如果您要将数据广泛地转换为文本,HTML或XML(尽管有仇恨,XSLT是无用的),如果您的数据包括很多文本标记,如果你的数据需要是人类可编辑的(尽管很讨厌,可以根据模式验证的可编辑XML对很多工作来说是一个非常好的工具),和/或如果你需要互操作任何无数的工作使用XML的工具和技术.

如果您真的不能被上述任何一项困扰,请选择JSON.

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


oro*_*olo 7

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


Ala*_* H. 7

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

  • YAML:YAML 不是(轻量级)标记语言 (2认同)
  • @tsee我对YAML的了解越多,你看起来就越正确. (2认同)

Joe*_*Joe 6

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

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

  • XML就像暴力:如果它不能解决您的问题,那么您就没有使用它. (19认同)