YAML和JSON有什么区别?什么时候比较喜欢一个 从技术上讲,YAML是JSON的超集。这意味着,至少在理论上,YAML解析器可以理解JSON,但不一定相反。
请参阅官方规范,标题为 “YAML:与JSON的关系” 。
一般来说,我喜欢YAML中某些JSON中没有的东西。
As @jdupont指出 ,YAML在视觉上更容易看。事实上, YAML主页 本身就是有效的YAML,但人们很容易阅读。 YAML能够使用“锚点”引用YAML文件中的其他项目。因此,它可以处理MySQL数据库中可能找到的关系信息。 YAML在嵌入其他序列化格式(如JSON或XML within 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]},它将在某些转换器中无限循环。即使使用循环检测,仍然可以使用“yaml炸弹”(参见 xml炸弹 )。
- 因为没有引用,所以不可能在JSON中使用对象引用序列化复杂结构。因此,YAML序列化可以更有效。
- 在某些编码环境中,使用YAML可以允许攻击者执行 执行任意代码 。
观察:
- Python程序员通常是YAML的忠实粉丝,因为使用缩进而不是括号语法来指示级别。
- 许多程序员认为将“意义”作为缩进的依附是一个糟糕的选择。
- 如果数据格式将离开应用程序的环境,在UI中解析或在消息传递层中发送,则JSON可能是更好的选择。
- YAML可以直接用于语法定义等复杂任务,并且通常比发明新语言更好。
绕过深奥的理论:
这回答标题,而不是详细信息,因为大多数人只是像谷歌一样从google搜索结果中读取标题,所以我觉得有必要解释从网站开发者的角度来看。
YAML使用空格缩进,这是Python开发人员熟悉的领域。 JavaScript开发人员喜欢JSON,因为它是JavaScript的一个子集,可以直接在JavaScript中解释和编写,同时使用简写方式声明JSON,在使用没有空格的典型变量名时,不需要键中的双引号。 有很多解析器在YAML和JSON的所有语言中都能很好地工作。 在许多情况下,YAML的空白格式可以更容易查看,因为格式化需要更人性化的方法。 如果您的编辑器中没有空格可见或缩进线指示符,那么YAML的空白虽然更紧凑,更容易查看,但可能难以手动编辑。 JSON的序列化和反序列化要快得多,因为要检查的功能明显少于YAML,这使得更小更轻的代码能够处理JSON。 一个常见的误解是YAML需要更少的标点符号并且比JSON更紧凑,但这完全是错误的。空格是不可见的,所以看起来字符较少,但是如果你计算实际的空格是必要的,以便正确解释YAML以及正确的缩进,你会发现YAML实际上需要比JSON更多的字符。 JSON不使用空格来表示层次结构或分组,并且可以通过删除不必要的空格来轻松展平,以实现更紧凑的传输。 房间里的大象:互联网本身 JavaScript如此明显地占据了网络的巨大优势,而JavaScript开发人员更喜欢将JSON作为数据格式与流行的Web API一起使用,因此在进行一般意义上的Web编程时,很难使用YAML而不是JSON,因为您可能会被淘汰在团队环境中。实际上,大多数Web程序员甚至都不知道YAML存在,更不用说考虑使用它了。
如果您正在进行任何Web编程,JSON是默认的方法,因为在使用JavaScript时不需要转换步骤,因此在这种情况下您必须提出更好的参数来使用YAML而不是JSON。