| Characteristic |
XML |
JSON |
| Data types |
Does not provide any notion of data types.
One must rely on XML Schema for adding type
information |
Provides scalar data types and the ability
to express structured data through arrays and
objects |
| Support for arrays |
Arrays have to be expressed by conventions,
for example through the use of an outer placeholder
element that models the arrays contents as inner
elements. Typically, the outer element uses the
plural form of the name used for inner elements |
Native array support |
| Support for objects |
Objects have to be expressed by conventions, often
through a mixed use of attributes and elements |
Native object support |
| Null support |
Requires use of xsi:nil on elements in an XML instance
document plus an import of the corresponding namespace |
Natively recognizes the null value |
| Comments |
Native support and usually available through APIs |
Not supported, althrough many JSON implementations
are capable to read and write C/C++ comments |
| Namespaces |
Supports namespaces, which eliminates the risk of name
collisions when combining documents. Namespaces also
allow existing XML-based standards to be safely extended |
No concept of namespaces. Naming collisions are usually avoided
by nesting objects or using a prefix in an object
member name (the former is preferred in practice). |
| Formatting decisions |
Complex. Requires a greater effort to decide how to map application
types to XML elements and attributes. Can create heated
debates whether an element-centric or attribute-centric
approach is better |
Simple. Provides a much more direct mapping for application data.
The only exception may be the absence of date/time literal |
| Size |
Documents tend to be lengthy in size, especially when an element-centric
approach to formatting is used. |
Syntax is very terse and yields formatted text where most of the space is
consumed (rightly so) by the represented data. |
| Learning curve |
Generally tends to require use of several technologies in concert: XPath,
XML Schema, XSLT, XML Namespaces, the DOM, and so on. |
Very simple technology stack that is already familiar to
developers with a background in the C-like family of programming languages |