最近公司突发奇想赶紧XML作为数据交换过于臃肿,让我这个实习生调研其他的数据交换格式是否可以在胜任XML的功能的前提下带来更多的编程及性能效益。但对于没有项目经验的我始终无法去拿捏这些技术的真谛以及适用环境。请各路高手看完小弟的调研后给我个回复,出出主意!~~小弟不胜感激。
下面介绍下我们项目的情况,底层用C/C++在UINX上,数据库是Oricle,Webservice是用JAVA开发,前台多用WINFORM(界面很绚丽,并且业务比较复杂)和少量Web(准备用Silverlight),这样一个跨语言跨平台的项目数据交换成了一个命脉的东西如何选择确实事关重大。
序列化格式:XML、JSON、YAML对比
1直观认识 XML<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book catalog="Programming">
<title lang="en">C++ Programming Language</title>
<author>Bjarne Stroustrup</author>
<year>1998</year>
<price>98.0</price>
</book>
<book catalog="Networking">
<title lang="en">TCP/IP Illustrated</title>
<author>Richard Stevens</author>
<year>1996</year>
<price>56.0</price>
</book>
</bookstore>
JSON[
{\"ID\":\"3\",\"Order\":\"9\"},
{\"ID\":\"1\",\"Order\":\"6\"},
{\"ID\":\"2\",\"Order\":\"8\"}
]
YAMLname: John Smith
age: 37
spouse:
name: Jane Smith
age: 25
children:
- name: Jimmy Smith
age: 15
- name: Jenny Smith
age 12
2格式简介XML (Extensible Markup Language)即可扩展标记语言
·文本协议,可以阅读;
·严格的格式要求;
·运用广泛,相关技术比较丰富,例如DTD、 XPath、XLink、XPoint、XSLT等;
JSON (JavaScript Object Notation)
·文本协议,比较易于阅读;
·相比于XML,语法更简单,体积更小,有javascript语言的标准支持。缺少引用概念(XLink、XPoint),缺少路径概念(XPath);
·XML用于更通用的目的,JSON更适合于数据交互的环境(尤其是web环境);
·最近JSON的兴起也出现了很多JSON的开发工具支持,开发起来非常方便。
·JSON基于 javascript语言(版本:ECMA 262 3rd Edition),现在趋向于成为一种跨语言的数据交互格式
YAML (YAML Ain't Markup Language)
·文本协议,易于阅读;
·YAML的语法比JSON复杂,JSON可以看作YAML的一个子集(在YAML文档中支持JSON格式的内容);
·适合表示程序语言的数据结构,支持串行处理和丰富的表达能力和可扩展性。
3编码、解码比较 XML
·编码难度:比较容易编码,有丰富的编码工具。
·解码难度:XML的解析方式有两种:
1.通过文档模型解析,也就是通过父标签索引出一组标记。例如:xmlData.getElementsByTagName("tagName"),但是这样是要在预先知道文档结构的情况下使用,无法进行通用的封装。
2.遍历节点(document 以及 childNodes)。这个可以通过递归来实现,不过解析出来的数据仍旧是形式各异,往往也不能满足预先的要求。
凡是这样可扩展的结构数据解析起来一定都很困难。
JSON (可理解为对JSON的序列化和反序列化)
·编码难度:有丰富的工具将对象序列化为JSON文本;
·解码难度:在知道JSON结构的情况下非常容易解析(反序列化就能得到想要的对象),在不知道JSON结构的情况下解码非常困难。
YAML和JSON相似,拥有比较强大的编码和解码工具(序列化工具但只限于几种特定语言)。
Ruby、Python等动态编程语言比较早的加入到YAML阵营,现在JAVA等静态语言也支持YAML格式的解析。YAML应用开始越来越广泛。但从目前来看它并不是一个非常成熟的跨语言数据交换格式。
综上所述,作为数据传输的载体,在知道数据结构的情况下,JSON和YAML处理更加方便和高效,同时也拥有良好的可读性。其中JSON相关技术支持是最为丰富,也是操作最为方便的,虽然没有YAML功能强大,但是前后台都可以方便对其进行操作以及减轻网络负载的特点也是它的一大优势。如果在数据嵌套不是非常复杂的情况下使用JSON将减小开发难度和性能提升。
C#操作示例 1 XML操做XML的程序就不列举了,相信大家都很熟悉;
2 JSON参见项目:基于.NET自带类库:JsonExpo
基于JSON.NET:Demo.Json.Net、JsonByC# (类库在Json35r6.zip中)
注:JSON.NET
JSON.NET是一个开源项目,提供.NET环境下JSON的各种操作,其中包括JSON序列化和反序列化的方法。同时它还增加了很多对JSON数据的操作,包括对LINQ的支持,能大大加快我们对JSON开发的速度。具体的开发文档在目录下的:Documentation.chm
3 YAML参考项目:YamlUtility
注:YAML对C#的支持现在还很少,只有简单的类库可以使用,暂不能满足复杂的项目应用,同时关于YAML的资料很少,YAML的具体项目也很稀少。
JAVA操作示例 1 XML略。
2 JSON参考示例:java
3 YAMLYAML有JAVA库可以使用,即:JYaml( JYaml is a Java library for working with the Yaml file format.) 类库为:jyaml-1.3.jar
/Files/lining/序列化格式对比.zip