Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does JSON compare to XML in terms of file size and serialisation/deserialisation time?

Tags:

I have an application that performs a little slow over the internet due to bandwidth reasons. I have enabled GZip which has improved download time by a significant amout, but I was also considering whether or not I could switch from XML to JSON in order to squeeze out that last bit of performance. Would using JSON make the message size significantly smaller, or just somewhat smaller? Let's say we're talking about 250kB of XML data (which compresses to 30kB).

like image 866
Nick Bolton Avatar asked Apr 20 '10 07:04

Nick Bolton


People also ask

How much faster is JSON than XML?

JSON is faster because it is designed specifically for data interchange. JSON encoding is terse, which requires less bytes for transit. JSON parsers are less complex, which requires less processing time and memory overhead. XML is slower, because it is designed for a lot more than just data interchange.

Is JSON more size efficient than XML?

JSON is about 2% smaller in bytes, but the XML format is about 38% shorter in length (lines of code), while being more readable.

Is JSON more compact than XML?

JSON is a more compact format, meaning it weighs far less on the wire than the more verbose XML. JSON is easier to work with in some languages (such as JavaScript, python, and php). Formatted JSON is generally easier to read than formatted XML.


1 Answers

In terms of object serialization, JSON will generally be more compact (even when compressed). For Example:

I serialized the same instance of an object into both XML and JSON and got the following:

JSON

{     "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

<?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> 

When encoded in ASCII, the JSON is 1422 bytes while the XML is 1954 bytes. After compressing them using a GZipStream, the difference is smaller but still pretty clear. The JSON compresses down to 524 bytes while the XML compresses down to 695 bytes.

Serialization/deserialization time will vary by implementation (and hardware of course) but I serialized and deserialized the above JSON and XML 100,000 times in a loop and got the total accumulative times:

JSON Serialization: 5258 ms, XML Serialization: 3266 ms

JSON Deserialization: 9582 ms, XML Deserialization: 4604 ms

So XML serializes and deserializes faster using the libraries I'm using (see below), but with averages measuring in the hundredths of milliseconds, I'd say network bandwidth and transfer time is more consequential.

(Note: I did this in C# using Microsoft's System.Xml.Serialization.XmlSerializer and JSON.Net's Newtonsoft.Json.JsonConvert classes)

like image 109
Miles B. Avatar answered Oct 12 '22 11:10

Miles B.