YAML和JSON有什么区别? 什么时候比较喜欢一个

我们何时应该使用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?