当前位置: 首页 > 科技观察

JSON,XML,TOML,CSON,YAML竞赛

时间:2023-03-13 04:28:52 科技观察

超级严肃的文字,关于样本序列化的集合、子集和超集我是开发者,我读代码,我写代码,我会写写代码的代码,我写代码编写供其他代码读取的代码。这一切都非常火星,但它有一种美。然而,归根结底,编写供其他代码阅读的代码会很快变得比本文更难理解。有很多方法可以做到这一点。一种不太复杂且在开发人员社区中流行的方法是数据序列化。对于那些不理解我刚才抛给你的流行语的人来说,数据序列化是从一个系统中获取一些信息,将其转换成其他系统可以读取的格式,并将其传递给其他系统的过程。虽然有很多数据序列化格式可以掩埋哈利法塔,但它们大多分为两类:易于人类读写和易于机器读写。两全其美很难,因为人类喜欢松散的类型和灵活的格式标准,使我们更具表现力,而机器往往被准确地告知一切,没有歧义和遗漏细节,并认为“严格规范”就是它们**最好的味道。由于我是一名Web开发人员,而且我们是创建网站的机构,因此我们将坚持使用Web系统可以轻松理解或理解的特殊格式,并且对人类可读性特别有用:XML、JSON、TOML、CSON和YAML。每个都有自己的优缺点和适当的用例场景。事实***回到互联网的早期,一些非常聪明的人决定将一种每个系统都能理解的标准语言放在一起,并创造性地将其命名为标准通用标记语言(简称SGML)。SGML非常灵活,并且由发布者很好地定义。它成为了XML、SVG和HTML等语言之父。这三个都符合SGML规范,但它们是规则更严格、灵活性更差的子集。最终,人们开始看到非常小、紧凑、可读且易于生成的数据的好处,这些数据可以在系统之间以编程方式共享,开销很小。大约在那个时候,JSON诞生并满足了所有需求。另一方面,其他语言开始出现以处理更专业的用例,例如CSON、TOML和YAML。XML:不可能最初,XML语言非常灵活且易于编写,但它冗长,人类难以阅读,计算机也难以阅读,并且有很多语法并非完全需要传达信息.今天,它不再用于网络上的数据序列化。除非您正在编写HTML或SVG,否则您不太可能在许多其他地方看到XML。一些过时的系统今天仍在使用它,但它通常太重而无法传递数据。我已经可以听到XML祖父们开始在他们的石碑上潦草地写下为什么XML很棒,所以我将提供一个小的补充:XML可以很容易地被系统和人读写。然而,真的,我的意思是荒谬,很难创建一个可以规范地读取它的系统。这是一个简单而漂亮的XML示例:Gambardella,MatthewXML开发人员指南计算机44.952000-10-01深入了解使用XML创建应用程序。太棒了。易于阅读、理解、编写和编写读写它的系统。但是考虑这个例子:b">]>"/>bbd这是100%有效的XML。几乎不可能阅读、理解或推理。编写可以使用和理解这一点的代码至少需要36根头发和248磅咖啡渣。我们没有那么多时间,也没有那么多咖啡,我们这些老程序员现在大部分都秃了。所以让它像csshacks、IE6和真空管一样留在我们的记忆中。JSON:一个并行的聚会好吧,我们都同意,XML=糟透了。那么,什么是好的替代品?JavaScriptObjectNotationJavaScriptObjectNotation,简称JSON。JSON(读起来像Jason的名字)由BrendanEich发明,并由伟大而强大的JavaScript意见领袖DouglasCrockford推广。现在几乎到处都在使用它。这种格式很容易由人和机器编写,根据规范中的严格规则相当容易解析,并且灵活——允许深度嵌套数据,支持所有原始数据类型,并将集合解释为数组或对象。JSON成为将数据从一个系统传输到另一个系统的事实标准。几乎所有的语言都内置了读写它的函数。JSON语法很简单。方括号表示数组,花括号表示记录,冒号分隔的两个值表示属性或“键”(左边)和值(右边)。所有键必须用双引号引起来:{"books":[{"id":"bk102","author":"Crockford,Douglas","title":"JavaScript:TheGoodParts","genre":"Computer","price":29.99,"publish_date":"2008-05-01","description":"UnearthingtheExcellenceinJavaScript"}]}这对你来说应该很有意义。它很简洁,从XML中删除了很多多余的废话并传达了相同数量的信息。现在JSON为王,本文的其余部分将介绍其他语言格式,这些格式只是JSON的简化版本,试图使其更简洁或更具人类可读性,但结构仍然非常相似。TOML:缩写为彻头彻尾的利他主义TOML(汤姆的显而易见的最小语言)允许以相当快速和简洁的方式定义深度嵌套的数据结构。名称中的Tom指的是***TomPrestonWerner,一位活跃于我们行业的创作者和软件开发人员。语法有点笨拙,更像是ini文件而不是JSON。这不是一个糟糕的语法,但需要一些时间来适应。[[books]]id='bk101'author='Crockford,Douglas'title='JavaScript:TheGoodParts'genre='Computer'price=29.99publish_date=2008-05-01T00:00:00+00:00description=“发掘JavaScript的卓越之处”在TOML中集成了一些很棒的功能,例如多行字符串、保留字符的自动转义、日期、时间、整数、浮点数等数据、科学记数法和“表格扩展”类型。***这一点很特别,也是TOML如此紧凑的原因:[a.b.c]d='Hello'e='World'上面的内容扩展为:{"d":"Hello""e":"World"}}}}使用TOML,您一定可以节省大量时间和文件长度。很少有系统使用它或非常相似的东西作为配置,这是它最大的缺点。根本没有多少语言或库可以用来解释TOML。CSON:包含特定系统的简单示例首先,有两个CSON规范。一个用于CoffeeScriptObjectNotation,另一个用于CursiveScriptObjectNotation。后者用得不多,所以不重点介绍。我们只专注于CoffeeScript。CSON需要一点介绍。首先,让我们谈谈CoffeeScript。CoffeeScript是一种通过运行编译器生成JavaScript的语言。它允许您以更简洁的语法编写JavaScript并将其转换为实际的JavaScript,然后您可以在Web应用程序中使用它。CoffeeScript通过删除JavaScript中必需的大量额外语法,使编写JavaScript变得更加容易。CoffeeScript摆脱的一个大问题是大括号——不需要它们。同样,CSON是没有花括号的JSON。它依靠缩进来确定数据的层次结构。CSON非常易于阅读和编写,并且通常需要比JSON更少的代码行,因为没有括号。CSON还提供了一些JSON没有的额外细节。多行字符串非常好写,一行以#符号开始即可输入注释,键值对之间无需逗号分隔。books:[id:'bk102'author:'Crockford,Douglas'title:'JavaScript:TheGoodParts'genre:'Computer'price:29.99publish_date:'2008-05-01'description:'发掘JavaScript的卓越之处']这是CSON的大问题。它是CoffeeScript对象表示法。这意味着您将通过CoffeeScript解析/标记化/lex/翻译或其他任何方式使用CSON。CoffeeScript是一个读取数据的系统。如果数据序列化的目的是允许数据从一个系统传递到另一个系统,这里我们有一种只能由单个系统读取的数据序列化格式,与火柴、防水海绵或sporks叉子部分同样有用。如果这种格式被其他系统采用,它在开发者世界中可能会非常有用。但到目前为止,这在很大程度上还没有发生,所以在PHP或JAVA等替代语言中使用它是不可能的。YAML:为年轻开发者呐喊欢欣鼓舞,因为YAML来自Python贡献者。YAML具有与CSON相同的功能集和相似的语法,具有一系列新功能,并且解析器可用于几乎所有Web编程语言。它还具有一些额外的功能,如循环引用、软包装、多行键、类型转换标签、二进制数据、对象合并和集合映射。它具有很强的可读性和可写性,并且是JSON的超集,因此您可以在YAML中使用完全限定的JSON语法,一切正常。你几乎不需要引号,它解释了大多数原始数据类型(字符串、整数、浮点数、布尔值等)。书籍:-id:bk102作者:Crockford,Douglas标题:'JavaScript:TheGoodParts'类型:计算机价格:29.99publish_date:!!str2008-05-01描述:发掘JavaScript行业的卓越之处年轻人正在迅速采用YAML作为他们首选的数据序列化和系统配置格式。他们做得很巧妙。YAML具有像CSON一样简单的所有优点,以及像JSON一样的数据类型解释的所有功能。YAML易于阅读,就像加拿大人易于相处一样。YAML有两个问题,第一个对我来说是个大问题。在撰写本文时,许多语言都没有内置YAML解析器,因此您需要使用第三方库或扩展来为您选择的语言解析.yaml文件。这没什么大不了的,但似乎大多数为YAML创建解析器的开发人员都选择随机将“附加功能”放入他们的解析器中。有些允许标记化,有些允许链接引用,有些甚至允许内联计算。这一切都很好(在某种意义上),只是这些功能都不是规范的一部分,因此很难在其他语言的其他解析器中找到。这会导致系统认证,您最终会遇到与CSON相同的问题。如果您使用仅在一个解析器中找到的功能,则另一个解析器将无法解释输入。大多数这些函数都是无意义的,不属于数据集,而是属于您的应用程序逻辑,因此最好简单地忽略它们并编写符合规范的YAML。第二个问题是很少有解析器完全实现规范。所有的基础知识都在那里,但很难找到更复杂和更新的东西,比如***语言的软包装、文档标记和循环引用。我还没有看到对这些东西有太多需求,所以希望它们不会让你失望。考虑到上述情况,我倾向于保留1.1规范中提供的更成熟的功能集,并避免在1.2规范中发现新内容。然而,编程是一头不断进化的野兽,所以当您读完本文时,您可能能够使用1.2规范。终极哲学这是最后一段。应根据具体情况评估每种序列化语言。在机器可读性方面,没有什么能比得上蜜蜂的膝盖。为了人类的可读性,有些是猫的喵喵声,有些是镀金的粪便。这是最终的细分:如果您正在编写供其他代码阅读的代码,请使用YAML。如果您编写的代码会写出供其他代码读取的代码,请使用JSON。***,如果你正在编写将代码翻译成代码供其他代码阅读的代码,请重新考虑你的人生选择。