YAML和JSON有什么区别,特别考虑如下几点? html
- 性能(编码/解码时间)
- 内存消耗
- 表情清晰
- 图书馆的可用性,易用性(我更喜欢C)
我打算在嵌入式系统中使用这两个之一来存储配置文件。 程序员
有关:
我应该使用YAML仍是JSON存储个人Perl数据? 数据库
#1楼
差别: 编程
- 根据您的使用方式,YAML比JSON更具可读性
- JSON一般更快 ,而且可能仍可与更多系统互操做
- 能够很是快速地编写一个“足够好”的JSON解析器
- 重复键,这是潜在的有效的JSON, 确定是无效的YAML。
- YAML具备大量功能,包括注释和关系锚。 所以,YAML语法很是复杂,而且可能难以理解。
- 能够在yaml中编写递归结构:
{a: &b [*b]}
,它将在某些转换器中无限循环。 即便进行循环检测,“ yaml炸弹”仍然是可能的(请参阅xml bomb )。
- 由于没有引用,因此没法使用JSON中的对象引用序列化复杂的结构。 所以,YAML序列化能够更有效。
- 在某些编码环境中,使用YAML可使攻击者执行任意代码 。
观察结果: 网络
- Python程序员一般是YAML的忠实拥护者,由于使用缩进(而不是方括号)来指示级别。
- 许多程序员认为将“含义”附加到缩进上是一个糟糕的选择。
- 若是数据格式将离开应用程序的环境,在UI中进行解析或在消息传递层中发送,则JSON多是更好的选择。
- YAML能够直接用于诸如语法定义之类的复杂任务,而且比发明新语言一般是更好的选择。
#2楼
我发现YAML看起来更容易:圆括号,“”等更少。尽管YAML中的制表符很烦人,但其中的一环却无处可去。 编辑器
在性能/资源方面,我不但愿二者之间有很大的差别。 性能
此外,咱们正在谈论配置文件,所以我不但愿出现频繁的编码/解码活动,不是吗? google
#3楼
若是您不须要YAML所具备的任何功能而JSON却没有,那么我将更喜欢JSON,由于它很是简单而且受到普遍支持(具备许多语言的库)。 YAML更复杂且支持较少。 我认为解析速度或内存使用不会有太大差别,而且可能不会对程序性能产生很大影响。 编码
#4楼
从技术上讲,YAML是JSON的超集。 这意味着,至少从理论上讲,YAML解析器能够理解JSON,但不必定能够理解。 spa
请参阅标题为“ YAML:与JSON的关系”的部分中的官方规范。
一般,我喜欢某些关于YAML的东西,这些东西在JSON中不可用。
- 正如@jdupont所指出的 ,YAML在视觉上更易于查看。 实际上, YAML主页自己就是有效的YAML,可是对于人类而言,它很容易阅读。
- YAML可以使用“锚”引用YAML文件中的其余项目。 所以,它能够处理在MySQL数据库中可能发现的关系信息。
- YAML是约YAML文件中嵌入其余的序列化格式诸如JSON或XML更稳健。
在实践中,最后两点都不会对您或我所作的事情有影响,但从长远来看,我认为YAML将是更健壮和可行的数据序列化格式。
目前,AJAX和其余Web技术倾向于使用JSON。 目前,YAML被更多地用于脱机数据处理。 例如,默认状况下,它包含在基于C的OpenCV计算机视觉程序包中,而JSON没有。
您会发现JSON和YAML的C库。 YAML的库每每是较新的,但过去我对它们没有遇到任何麻烦。 参见例如Yaml-cpp 。
#5楼
绕开深奥的理论
这回答了标题,而不是细节,由于大多数人只是从像我这样的Google搜索结果中读取标题,因此我以为有必要从网络开发人员的角度进行解释。
- YAML使用空格缩进,这是Python开发人员熟悉的领域。
- JavaScript开发人员喜欢JSON,由于它是JavaScript的子集,而且能够在JavaScript内部直接解释和编写,还可使用简写方式声明JSON,在使用不带空格的典型变量名时,键中不须要双引号。
- 对于YAML和JSON,有不少解析器在全部语言中均可以很好地工做。
- 在许多状况下,YAML的空白格式可能更容易查看,由于格式须要更易于理解的方法。
- 若是您在编辑器中没有可见的空格或缩进线指示符,则YAML的空格虽然更紧凑且更易于查看,但看起来很难手动编辑。
- 与要检查的YAML相比,JSON的功能要少得多,所以JSON的序列化和反序列化速度要快得多,这使得更小更轻的代码能够处理JSON。
- 一个常见的误解是,YAML比JSON须要更少的标点而且更紧凑,但这彻底是错误的。 空格是不可见的,所以彷佛字符较少,可是若是您计算实际的空格,以便正确解释YAML和正确的缩进,必须存在该空格,您会发现YAML实际上比JSON须要更多的字符。 JSON不使用空格来表示层次结构或分组,而且能够很容易地进行平整,并删除了没必要要的空格以进行更紧凑的传输。
房间里的大象:互联网自己
JavaScript如此明显地在网络上占据了主导地位,而且JavaScript开发人员更倾向于将JSON做为数据格式与流行的Web API一块儿使用,所以在通常意义上进行Web编程时,很难争辩使用YAML而不是JSON,由于您可能会过度同意在团队环境中。 实际上,大多数Web程序员甚至都不知道YAML的存在,更不用说考虑使用它了。
若是您正在执行任何Web编程,则JSON是默认的处理方式,由于使用JavaScript时不须要任何翻译步骤,所以在这种状况下,您必须提出一个更好的参数以在JSON上使用YAML。