JSON or XML, which format to choose?

With this comparison of JSON and XML, we will attempt, by highlighting the strengh and the weakness of each format, to help you to choose the right one for a given application, and especially for an Ajax/HTML 5 application.

JSON

JSON is a recursive format compatible with JavaScript and that actually is similar in structure to a JavaScript object. It is an object stored into a file. It dates back to 2002 and suddently gained popularity when Ajax become widely used. JSON files can be stored in a PostgreSQL database, and there is a W3C standard to represent form data in JSON, among many other applications.

JSON presumes you know the structure of the document. When used in any programming language, data are used through the structure of an object

1) JSON and JavaScript

JSON is very easy to use in JavaScript, it is a part of the language.
To use a JSON file, you have just to load the file as a text, this is the content of the responseText attribute in Ajax.
Then you use the eval() JavaScript function to transform it into JavaScript object:

var doc = xhr.responseText;
var jdoc = eval('(' + doc + ')');

or with a recent browser:

var jdoc = JSON.parse(doc);

Once the file is parsed, it is used as any JavaScript object:

var value = jdoc.commands[0].value;
var action = jdoc.commands[0].action;
Several scripts are available on the Web to serialize a JavaScript object into a JSON file. With a recent browser, the object is converted to a string:
var str = JSON.stringify(jdoc);

2) JSON and PHP

You can use JSON in PHP once parsed with a PHP parser. A PHP library exists for JSON, you have just to configure php.ini to use it. There is also a json.php library to include directly with the "require" function.

3) Web service

The JSON Web service library is very popular. It is even supported by the Silverlight virtual machine.

4) Transformations

Transformation from a format to another one is accomplished by serializing the object in memory into the new format.

5) Database

JSON is a datatype for PostgreSQL.

6) Example of JSON file

[ { 
"menu": "File", 
"commands": [ 
 {
    "value": "New", 
    "action":"CreateDoc"     
 },
 {
    "value": "Open", 
    "action": "OpenDoc" 
}, 
{ 
    "value": "Close", 
    "action":  "CloseDoc"
 } ]
 } ] 

XML

XML is a markup language that is the base format of a lot of standards and interface languages: RSS, SVG, OPML, XHTML, Open XML, XAML, etc. It allows to describe and analyze any kind of documents, but binary ones, and store them into a file.
It is more verbose than JSON, but a lot of tools are available to process it and it is also the format of documents for word processors and other desktop software.
The structure of XML is free. Any textual content can be expressed in XML and accessed by ID or name. But the format consumes a lot of space.

Using DOM's method may be tedious with XML and slow with XHTML.

1) XML and JavaScript

Unlike JSON, the file is loaded in Ajax directly as an XML document, this is the responseXML attribute of Ajax.
The content is then accessed by DOM's methods.

var xdoc = xhr.responseXML;
var x = xdoc.getElementById("sometag");

2) XML and PHP

XML is part of the core PHP 5 language, it is used directly in PHP through the DOMDocument class and the SimpleXML class. You can load an XML file, process it with DOM's methods and save it directly into a file.

3) Web service

This is an XML format for Web service: SOAP. It is a W3C standard but rather intricate and not very popular.

4) Transformations

Transformation from an XML document to another format may be accomplished via XSLT, not a very easy to use tool. Of course you can also in PHP or JavaScript, load the XML file, get the data and build a file in another format, in some cases this is more easy.

5) Database

The combination of XML and XPath allow to use XML as database, it is thus convenient for large resources.

6) Example of XML file

<?xml version="1.0" ?>
<menubar>
   <menu name="File">
      <command value="New" action="CreateDoc" />
      <command value="Open" action="OpenDoc" />    
      <command value="Close" action="CloseDoc" />
   </menu>
</menubar>

There is great freedom in how to structure the data:

<command>
    <value>New</value>
    <action>CreateDoc</action>
</command> 

Conclusion

JSON is simpler to get data from the server and use it as a persistent memory for a program. You have to know the structure of the data to use it, you must be the owner of the data file preferably.
It is lighter than XML and save resources.

XML is better for presentation purpose. It is the language of several graphical user interfaces for now: XAML, XUL, MXML, etc., while QML is similar to JSON. In the first case, the data is stored in a form and used in another form.
You can use XML from external sources and even make XML databases.