在文件大小和序列化/反序列化时间方面,JSON与XML相比如何?
我有一个应用程序,由于带宽的原因,在互联网上执行有点慢。我启用了GZip,这大大缩短了下载时间,但我也在考虑是否可以从XML切换到JSON,以挤出最后一点性能。使用JSON会使消息的大小大大减小,还是只是稍微小一点?假设我们讨论的是250kB的XML数据(压缩到30kB)。是的,JSON将快30%左右,行中的字符更少,解析速度非常快在文件大小和序列化/反序列化时间方面,JSON与XML相比如何?,xml,json,Xml,Json,我有一个应用程序,由于带宽的原因,在互联网上执行有点慢。我启用了GZip,这大大缩短了下载时间,但我也在考虑是否可以从XML切换到JSON,以挤出最后一点性能。使用JSON会使消息的大小大大减小,还是只是稍微小一点?假设我们讨论的是250kB的XML数据(压缩到30kB)。是的,JSON将快30%左右,行中的字符更少,解析速度非常快 Ypu还可以看看“YAML”,它在消息中发送的元数据绝对最少。一般来说,JSON比等效的XML快得多,也小得多。XML更丰富,因为您可以分别存储元数据(属性)和内容
Ypu还可以看看“YAML”,它在消息中发送的元数据绝对最少。一般来说,JSON比等效的XML快得多,也小得多。XML更丰富,因为您可以分别存储元数据(属性)和内容,但同样可以通过适当的结构化约定在JSON中实现。这不是一个答案,而是一个检查假设的建议 JSON有多小 JSON: XML:
<person firstname='Fred'
lastname='Flintstone'
age='38'
spouse='Wilma'/>
我只是不明白,一般来说,JSON表达式如何比“等效”XML小30%。即使您使用嵌套结构和数组来增加这些内容的复杂性,也不会有30%的差异。这大致相当,json获得优势,因为嵌套结构的结束标记是},而XML获得优势,因为它不需要引用字段名
如果您强迫我使用XML元素,如下所示:
<person>
<firstname>Fred<firstname>
<lastname>Flintstone<lastname>
<age>38</age>
<spouse>Wilma</spouse>
</person>
弗莱德
燧石
38
威尔玛
…当然,生成的XML比以前的JSON要大。但这似乎是作弊
现在,您格式化XML的方式可能是目前所有内容都使用元素,因此有机会相应地缩减有效负载。但这并不一定意味着JSON。如果您有处理XML的工具和库,那么可以保留XML并进行收缩 回答这个问题的最好方法是自己测试,因为这涉及到压缩。通过客观的回答,您还可以巧妙地避免XML与JSON之间的圣战 因为这只是一个测试,并不需要真正工作,所以您可以用javascript编写一个xml->json转换器,它遍历xml DOM树并将其复制到嵌套的数组/对象结构中,然后将其传递给json.stringify()。唯一棘手的是决定什么成为数组,什么成为对象 找到所发送数据的代表性示例(或一些示例),使用工具将其转换为JSON,gzip it和原始XML,并比较大小 注意:我到处寻找一个在线的XML->JSON转换器,它们都很糟糕——引号外的空白(在JSON中是非法的,可以改变大小)和不带引号的键名(同上)。不要在测试中使用它们,否则会得到错误的数据。
<person firstname='Fred'
lastname='Flintstone'
age='38'
spouse='Wilma'/>
"person":{"firstname":"Fred",
"lastname":"Flintstone",
"age":38,
"spouse":"Wilma" }
“人”:{“名字”:“弗雷德”,
“姓氏”:“燧石”,
“年龄”:38岁,
“配偶”:“威尔玛”}
XML:80个字符
JSON:92个字符
XML是13%的瘦身赢家,谁会想到所有的虚假声明呢
[示例取自上面的Cheeso。请注意,回车类型会改变大小,但两者的大小相同。如果两者都没有任何返回,则比率为XML:74,JSON:86,相差14%]
在这次讨论中,有人声称“使用属性进行内容是欺骗”(引用[this][1])
1) 请问格式良好的XML是如何“欺骗”的?如果它没有欺骗(很长)规格,那么让我们忘掉它有效是有效的
2) 在这种情况下,ASP.NET web.config是“作弊”的,还有上千个大狗的例子
<forms loginUrl="~/Home/Login"
defaultUrl="~/Home"
timeout="2880"
requireSSL="false"
slidingExpiration="true" />
公平地说,有些人在如何形成XML时往往有一种臃肿的XML心态
但不应该说,13%更精简的XML种类并不那么有效。因此,它甚至在大小上超过了JSON。
[1] :[2004年文章,请注意]事实上,这个问题似乎很难回答 几年前,json是“更快”的,但两者之间的差异变得更细微了 我所观察到的是
- 与json相比,使用gzip可以更好地压缩xml。。下载时节省的时间可以抵消其他组件
- 原始js中的xml解析/查询与json大致相当
- jquery中的xml解析/查询要慢得多。。。我不会吝惜jquery开发人员关注json
然后继续。。。这里没有什么可看的在对象序列化方面,JSON通常会更紧凑(即使在压缩时)。例如: 我将同一个对象实例序列化为XML和JSON,得到以下结果: JSON XML
2222
124235
9652358474
0
为了卡车
手机
权限最小化
达斯公司
565555555
222224455116
32
波特贝洛路西555号
伦敦
得克萨斯州
45217
权限最小化
1111222233334444
546
10
2018
波特贝洛路西555号
伦敦
得克萨斯州
45217
0
权限最小化
波特贝洛路西555号
伦敦
得克萨斯州
45217
25
5.
10
1.5
35
1442-4521
0
2.
72.95
地面
1212-5549
0
1.
31.15
地面
当以ASCII编码时,JSON是1422字节,而XML是1954字节。在使用gzip压缩它们之后
<forms loginUrl="~/Home/Login"
defaultUrl="~/Home"
timeout="2880"
requireSSL="false"
slidingExpiration="true" />
{
"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 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>