首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在文件大小和序列化/反序列化时间方面,JSON与XML相比如何?

在文件大小和序列化/反序列化时间方面,JSON与XML相比如何?
EN

Stack Overflow用户
提问于 2010-04-20 15:35:20
回答 7查看 27.2K关注 0票数 25

我有一个应用程序,由于带宽的原因,在互联网上执行有点慢。我启用了GZip,它极大地缩短了下载时间,但我也在考虑是否可以从XML切换到JSON,以便挤出最后一点性能。使用JSON会使消息大小明显变小,还是只是稍微变小一些?假设我们讨论的是250kB的XML数据(压缩到30kB)。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-04-21 02:03:38

不是一个答案,而是一个检查你的假设的建议。

JSON是怎么变小的?

JSON:

代码语言:javascript
复制
"person":{"firstname":"Fred", 
          "lastname":"Flintstone",  
          "age":38, 
          "spouse":"Wilma" }

XML:

代码语言:javascript
复制
<person firstname='Fred' 
        lastname='Flintstone' 
        age='38' 
        spouse='Wilma'/>

我只是不明白,一般来说,JSON表达式怎么会比“等价的”XML小30%。即使增加了这些东西的复杂性,使用嵌套结构和数组,也不会有30%的差异。它大致相当,json获得了优势,因为嵌套结构的结束标记是},而XML获得了优势,因为它不需要引用字段名。

如果您强迫我使用XML元素,如下所示:

代码语言:javascript
复制
<person>
   <firstname>Fred<firstname>
   <lastname>Flintstone<lastname>
   <age>38</age>
   <spouse>Wilma</spouse>
</person>

...sure,则生成的XML比以前的JSON更大。但这看起来像是作弊。

现在可能的情况是,目前格式化XML的方式将元素用于所有内容,并且有机会相应地缩小有效负载。但这并不一定意味着JSON。如果您有处理XML的工具和库,则可以保留XML和收缩。

票数 15
EN

Stack Overflow用户

发布于 2016-06-08 01:42:24

在对象序列化方面,JSON通常更紧凑(即使经过压缩)。例如:

我将一个对象的相同实例序列化为XML和JSON,并得到以下结果:

JSON

代码语言:javascript
复制
{
    "Account": "2222",
    "Login": "124235",
    "SalesId": null,
    "CustomerReference": "9652358474",
    "Status": null,
    "DropShip": 0,
    "PromoCode": null,
    "Notes": "For the truck",
    "Errors": null,
    "ReferenceId": null,
    "PaymentMethod": "CKPhone",
    "CheckPayment": {
        "Name": "Simon Riggs",
        "CompanyName": "Darth Inc",
        "AccountNumber": "565555555",
        "RoutingNumber": "222224455116",
        "CheckNumber": "32",
        "Address": {
            "Attention": null,
            "Street1": "555 W Portebello Rd",
            "Street2": null,
            "City": "London",
            "State": "Texas",
            "Zipcode": "45217",
            "Country": null,
            "ReferenceId": null,
            "GetAxType": 2
        },
        "ReferenceId": null,
        "GetAxType": 2
    },
    "CreditCardPayment": {
        "Name": "Simon Riggs",
        "CardNumber": "1111222233334444",
        "Cvv2": "546",
        "Month": 10,
        "Year": 2018,
        "Address": {
            "Attention": null,
            "Street1": "555 W Portebello Rd",
            "Street2": null,
            "City": "London",
            "State": "Texas",
            "Zipcode": "45217",
            "Country": null,
            "ReferenceId": null,
            "GetAxType": 2
        },
        "ReferenceId": "0",
        "GetAxType": 2
    },
    "ShippingAddress": {
        "Attention": "Simon Riggs",
        "Street1": "555 W Portebello Rd",
        "Street2": null,
        "City": "London",
        "State": "Texas",
        "Zipcode": "45217",
        "Country": null,
        "ReferenceId": null,
        "GetAxType": 2
    },
    "Totals": {
        "SubTotal": 25.0,
        "TotalTax": 5.0,
        "ShippingTotal": 10.0,
        "ShippingTax": 1.5,
        "GrandTotal": 35.0
    },
    "Lines": [{
        "SKU": "1442-4521",
        "LineNum": 0.0,
        "Qty": 2.0,
        "Price": 72.95,
        "ShippingClass": "Ground",
        "ReferenceId": null,
        "GetAxType": 2
    },
    {
        "SKU": "1212-5549",
        "LineNum": 0.0,
        "Qty": 1.0,
        "Price": 31.15,
        "ShippingClass": "Ground",
        "ReferenceId": null,
        "GetAxType": 2
    }],
    "GetAxType": 2
}

XML

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-16"?>
<SalesOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Account>2222</Account>
  <Login>124235</Login>
  <CustomerReference>9652358474</CustomerReference>
  <DropShip>0</DropShip>
  <Notes>For the truck</Notes>
  <PaymentMethod>CKPhone</PaymentMethod>
  <CheckPayment>
    <Name>Simon Riggs</Name>
    <CompanyName>Darth Inc</CompanyName>
    <AccountNumber>565555555</AccountNumber>
    <RoutingNumber>222224455116</RoutingNumber>
    <CheckNumber>32</CheckNumber>
    <Address>
      <Street1>555 W Portebello Rd</Street1>
      <City>London</City>
      <State>Texas</State>
      <Zipcode>45217</Zipcode>
    </Address>
  </CheckPayment>
  <CreditCardPayment>
    <Name>Simon Riggs</Name>
    <CardNumber>1111222233334444</CardNumber>
    <Cvv2>546</Cvv2>
    <Month>10</Month>
    <Year>2018</Year>
    <Address>
      <Street1>555 W Portebello Rd</Street1>
      <City>London</City>
      <State>Texas</State>
      <Zipcode>45217</Zipcode>
    </Address>
    <ReferenceId>0</ReferenceId>
  </CreditCardPayment>
  <ShippingAddress>
    <Attention>Simon Riggs</Attention>
    <Street1>555 W Portebello Rd</Street1>
    <City>London</City>
    <State>Texas</State>
    <Zipcode>45217</Zipcode>
  </ShippingAddress>
  <Totals>
    <SubTotal>25</SubTotal>
    <TotalTax>5</TotalTax>
    <ShippingTotal>10</ShippingTotal>
    <ShippingTax>1.5</ShippingTax>
    <GrandTotal>35</GrandTotal>
  </Totals>
  <Lines>
    <SalesLine>
      <SKU>1442-4521</SKU>
      <LineNum>0</LineNum>
      <Qty>2</Qty>
      <Price>72.95</Price>
      <ShippingClass>Ground</ShippingClass>
    </SalesLine>
    <SalesLine>
      <SKU>1212-5549</SKU>
      <LineNum>0</LineNum>
      <Qty>1</Qty>
      <Price>31.15</Price>
      <ShippingClass>Ground</ShippingClass>
    </SalesLine>
  </Lines>
</SalesOrder>

当以ASCII编码时,JSON是1422字节,而XML是1954字节。使用GZipStream对它们进行压缩后,差别较小,但仍然非常明显。JSON压缩为524字节,而XML压缩为695字节。

序列化/反序列化时间会因实现(当然还有硬件)而有所不同,但我在一个循环中对上述JSON和XML进行了100,000次序列化和反序列化,得到了总的累积时间:

JSON序列化:5258ms,XML序列化:3266ms

JSON反序列化:9582ms,XML反序列化:4604ms

因此,使用我正在使用的库(见下文),XML的序列化和反序列化速度更快,但由于平均值是以百分之一毫秒为单位测量的,我认为网络带宽和传输时间更重要。

(注意:我使用微软的System.Xml.Serialization.XmlSerializer和JSON.Net的Newtonsoft.Json.JsonConvert类在C#中做到了这一点)

票数 30
EN

Stack Overflow用户

发布于 2013-03-28 21:46:14

实际上,这似乎更难回答,

几年前,json是“更快的”,但两者之间的差异已经变得更加细微。

我观察到的是;

  • xml用gzip比用json压缩得更好。下载过程中节省的时间可以抵消其他组件的影响原始js中的
  • xml解析/查询大致相当于json
  • 中的
  • xml解析/查询要慢得多……我不会嫉妒jquery开发人员专注于json

总体而言,加快现代浏览器速度的技术也适用于xml处理。

一般来说,每当我听到json被吹捧为XML的“低脂肪”替代品时,我就在想,这不是某种对体重问题的潜意识痴迷……这就是我悲观的日子;

基本上,我遵循的经验法则是

标记适用于文档json适用于数据

然后继续前进..。这里没什么可看的

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2673367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档