我们何时应该使用YAML而不是JSON,反之亦然,考虑以下事项?
性能(编码/解码时间) 内存消耗 表达清晰 图书馆的可用性,易用性(我更喜欢C) 我打算在我们的嵌入式系统中使用其中的一个来存储配置文件。
有关:
我应该使用YAML还是JSON来存储我的Perl数据?
技术上,YAML是JSON的超集。 这意味着,至少在理论上,YAML解析器可以理解JSON,但不一定是相反的方式。
请参阅官方规格,在标题为“YAML:与JSON的关系”一节中。
一般来说,我喜欢关于YAML的某些东西,这些东西在JSON中不可用。
正如@jdupont指出的那样,YAML在视觉上更容易看。 事实上,YAML主页本身是有效的YAML,但人类阅读起来很容易。 YAML可以使用“锚点”引用YAML文件中的其他项目。 因此,它可以像处理MySQL数据库一样处理关系信息。 YAML在将更多的序列化格式(如JSON或XML)嵌入到YAML文件中更加健壮。 在实践中,最后两点都不会影响你或我做的事情,但从长远来看,我认为YAML将是一个更强大和可行的数据序列化格式。
目前,AJAX和其他Web技术倾向于使用JSON。 YAML目前被更多地用于离线数据处理。 例如,它默认包含在基于C的OpenCV计算机视觉软件包中,而JSON则不包含在内。
您将找到JSON和YAML的C库。 YAML的图书馆往往比较新,但过去我没有遇到麻烦。 参见例如Yaml-cpp。
区别:
YAML取决于你如何使用它,可以比JSON更具可读性 JSON通常速度更快,可能仍然可以与更多系统互操作 可以非常快地编写一个“足够好”的JSON解析器 重复键可能是有效的JSON,绝对是无效的YAML。 YAML有很多功能,包括评论和关系锚。 YAML语法因此相当复杂,并且可能很难理解。 可以在yaml中编写递归结构: {a: &b [*b]}
,它将在某些转换器中无限循环。 即使采用循环检测,仍然可以使用“炸弹”(见xml炸弹)。 由于没有引用,因此无法使用JSON序列化具有对象引用的复杂结构。 YAML序列化因此可以更高效。 观察:
Python程序员通常是YAML的忠实粉丝,因为使用了缩进而不是括号内的语法来表示级别。 许多程序员认为,“意义”对缩进的依附是一个糟糕的选择。 如果数据格式将离开应用程序的环境,在UI中解析或在消息传递层中发送,JSON可能是更好的选择。 YAML可以直接用于语法定义等复杂任务,并且通常是比创建新语言更好的选择。
绕过深奥的理论
这回答标题,而不是细节,因为大多数人只是从像我这样的谷歌搜索结果中读取标题,所以我觉得有必要从Web开发人员的角度来解释。
YAML使用空格缩进,这是Python开发人员熟悉的领域。 JavaScript开发人员喜欢JSON,因为它是JavaScript的一个子集,可以直接在JavaScript内部进行解释和编写,同时使用简写方式声明JSON,在使用不含空格的典型变量名时不需要双引号。 有许多解析器在YAML和JSON的所有语言中都能很好地工作。 在很多情况下,YAML的空白格式可以更容易地查看,因为格式化需要更人性化的方法。 如果您的编辑器中没有空白可见或缩进线指示符,则YAML的空白区域更加紧凑并且更易于查看,因此难以进行手动编辑。 JSON的序列化和反序列化速度要快得多,因为与YAML相比,JSON的功能要少得多,这使得更小,更轻的代码可以处理JSON。 一个常见的误解是,YAML需要的标点较少,比JSON更紧凑,但这完全是错误的。 空白字符是不可见的,所以它看起来好像字符少了,但是如果你计算出YAML需要的实际空白以及合适的缩进,那么你会发现YAML实际上需要比JSON更多的字符。 JSON不使用空格来表示层次结构或分组,并且可以轻松地将其展平,并删除不必要的空白字符以实现更紧凑的传输。 房间里的大象:互联网本身
JavaScript明显地占据了网页的巨大空间,JavaScript开发人员更喜欢将JSON作为数据格式与流行的Web API一起使用,所以在进行一般意义上的Web编程时,很难争论使用YAML而不是JSON,因为您可能会被超出在团队环境中。 事实上,大多数网络程序员甚至都不知道YAML存在,更不用说考虑使用YAML了。
如果您正在进行任何Web编程,那么JSON是默认的解决方法,因为在使用JavaScript时不需要执行翻译步骤,所以您必须提出一个更好的参数,以便在此情况下使用YAML而不是JSON。
链接地址:
http://www.djcxy.com/p/45313.html
上一篇:
What is the difference between YAML and JSON? When to prefer one over the other
下一篇:
Unknown file type MIME?