`
iunknown
  • 浏览: 404716 次
社区版块
存档分类
最新评论

xml 和 json 在序列化数据方面的差异

    博客分类:
  • MISC
阅读更多
spdatapickle 项目中,实现了在 C 的 structure 和 xml/json 之间自动转换的功能。需要选择一种 xml/json 的格式。在查看了一些其他语言的实现之后,json 的格式比较一致,xml 的格式就五法八门。不过从这里也可以看出,xml 能用的方法实在太多,太灵活了。json 的定义更接近于编程语言,格式就比较一致。xml 用于序列化数据的格式,比较著名的有 xmlrpc 。xmlrpc 的格式,冗余实在太大,并且还丢失了很多的信息。在 spdatapickle 中,仿照 json 设计了一套格式,比起 xmlrpc 少一些冗余。json 的格式倒是不用怎么设计,基本按 json 自身的定义来做就好了,和 php 的 json_encode/json_decode 完全一致。

列一下不同的格式出来的结果:

C 的 structure 的定义
typedef struct tagXYZPhoneNumber {
    char mType[10];
    int mPrimary;
    char * mContent;
} XYZPhoneNumber_t;

    XYZPhoneNumber_t phoneNumber;
    memset( &phoneNumber, 0, sizeof( phoneNumber ) );

    strncpy( phoneNumber.mType, "home", sizeof( phoneNumber.mType ) - 1 );
    phoneNumber.mPrimary = 0;
    phoneNumber.mContent = strdup( "12345678" );



json 格式
len 54
{"Type": "home",
"Primary": 0,
"Content": "12345678"}


spdatapickle xml 格式
len 96
<PhoneNumber>
  <Type>home</Type>
  <Primary>0</Primary>
  <Content>12345678</Content>
</PhoneNumber>


xmlrpc 格式
len 239
<struct>
  <member>
    <name>Type</name>
    <value><string>home</string></value>
  </member>
  <member>
    <name>Primary</name>
    <value><i4>0</i4></value>
  </member>
  <member>
    <name>Content</name>
    <value><string>12345678</string></value>
  </member>
</struct>


在这里有人从另外的角度来分析了一下 xmlrpc 的缺点:
XML Matters: XML-RPC as object model
http://www.ibm.com/developerworks/xml/library/x-matters15.html

分享到:
评论
2 楼 livetalk 2011-08-06  
fadsfadsfa
1 楼 livetalk 2011-08-06  
test

相关推荐

    xsd2pgschema:基于XML Schema的数据库复制工具-开源

    PgSchema 服务器,序列化的 PostgreSQL 数据模型服务器,可用于加速复杂 XML Schema 的分析。 大型 XML 文件可以通过 xmlsplitter 进行拆分,xmlsplitter 是一种基于 XPath 和 StAX 的灵活 XML 拆分器。

    jsdon:基于LinkeDOM思想的DOM序列化器

    一个基于想法和JSDON规范的DOM解/序列化器(这是我刚刚编写的) 。 为什么 我喜欢我们可以线性表示DOM的想法,并且我们可以通过postMessage或任何其他有能力的JSON PL进行任意操作,从而简化差异化(必要时进行更新...

    Forest轻量级HTTP客户端框架.rar

    有的以JSON 方式进行序列化,有的以XML方式进行序列化。类似于这样细节的差别太多了。 不同的公司API规范不一样,这很正常。但是对于我来说,我如果想要代码变得优雅。我就必须解决一个痛点: 不同服务商API那么多...

    firely-net-sdk:用于HL7 FHIR的官方Firely .NET SDK

    使用POCO的FHIR数据模型的类模型Xml和Json解析器和序列化器REST客户端,用于与FHIR兼容的服务器一起使用用来处理规范元数据的帮助程序类,最值得注意的是StructureDefinition和差异的生成根据配置文件验证实例评估...

    一个简单好用的http请求框架.rar

    有的以JSON 方式进行序列化,有的以XML方式进行序列化。类似于这样细节的差别太多了。 不同的公司API规范不一样,这很正常。但是对于我来说,我如果想要代码变得优雅。我就必须解决一个痛点: 不同服务商API那么...

    python-libnmap:libnmap是一个python库,用于运行nmap扫描,解析和差异扫描结果。 它支持python 2.7到3.8。 太好了

    report :使您能够处理解析的扫描结果并以json格式反序列化扫描结果 diff :使您可以查看两次扫描之间的变化 common :包含基本的nmap对象,例如NmapHost和NmapService。 要注意的是,每个对象都可以与另一个类似的...

    jQuery权威指南-源代码

    6.2.3 serialize()序列化表单/175 6.3 $.ajax()方法/177 6.3.1 $.ajax()的基本概念/177 6.3.2 $.ajaxSetup()设置全局Ajax /181 6.4 Ajax中的全局事件/184 6.4.1 Ajax全局事件的基本概念/184 6.4.2 ajaxStart...

    Ctool 程序开发常用工具-crx插件

    |php数组/序列化|`数组`,`serialize`,`json`|√| |文本差异化对比|`行`,`单词`,`css`|√| |crontab校验工具|`Crontab`,`规则`,`校验`,`例子`|√| |websocket调试|`websocket`,`在线调试`|`×`| |单位换算|`长度`,`...

    Java学习笔记-个人整理的

    {7.4}基本类型数据序列化}{108}{section.7.4} {7.5}String的序列化}{109}{section.7.5} {7.6}InputStream与OutputStream}{109}{section.7.6} {7.6.1}FileInputStream}{109}{subsection.7.6.1} {7.6.2}...

Global site tag (gtag.js) - Google Analytics