JSON, pour échanger des objects entre langages différents

JSON (JavaScript Object Notation) est un format de données pour l'échange entre le navigateur et le serveur. Sa syntaxe est similaire à celle d'un tableau associatif en JavaScript. Actually, the format defined in 2002 was based on a subset of the language spec, ECMA-262.

Exemple de fichier JSON:

{
   "menu": "Fichier",
   "commandes": 
   [
    {
     "title": "Nouveau",
     "action":"create"
    },  
    { 
     "title": "Ouvrir",
     "action": "open"
    },
    { 
     "title": "Quitter",
     "action": "exit"
    }
   ]
} 

Ce fichier est la représentation d'un menu, l'article fournit une démonstration de son utilisation.

L'équivalent XML:

<menu label="Fichier">
<menulist>
<command label="Nouveau" command="create" />
<command label="Ouvrir" command="open"/>
<command label="Quitter" command="exit" />
</menulist>
</menu>

La version XML est plus facile à lire, mais pour l'ordinateur, l'avantage est JSON: plus léger, plus facile à parser, est similaire à un objet JavaScript.

Le format reconnaît les même types de données que JavaScript: Number, String, Boolean, Array, Object, null.
Number, String, Boolean et null sont des primitives que l'on peut assigner à une clé qui doit être une chaîne.
Array est une liste de clé-valeurs placées entre crochets.
Object est une liste de clé-valeurs placées entre accolades.

Notre exemple est un objet qui contient un tableau. Les valeurs numériques sont inscrites telles quelles, tandis que les chaînes de caractères sont toujours entre guillemets.

Comment utiliser JSON

On lit un fichier JSON sur le serveur grâce à un parseur. Il en existe pour les langages de programmation les plus courants.
Dans une page web, il suffit de donner le contenu du fichier en argument à la fonction eval() pour retourner un tableau ou un objet utilisable directement par JavaScript.

var x = eval('(' + xhr.responseText + ')'); 

Par exemple le contenu assigné à l'attribut responseText de l'objet XMLHttpRequest lors d'une requête en Ajax peut devenir une objet dans un programme.

Avant d'assigner un objet en JavaScript avec la fonction eval, il est recommandé de purger le contenu avec une expression régulière pour éviter une injection possible de code malveillants.

var doc = xhr.responseText;
var obj = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.
   test( doc.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + doc + ')');

Ce code est donné dans le RFC 4627.

Comme il existe des parsers JSON pour tous les langages fonctionnant coté serveur, il est ainsi possible d'échanger des objets entre une application JavaScript et le backend.

Depuis PHP 5.2, l'extension JSON fait partie de l'installation par défaut. Elle propose les fonctions json_decode et json_encode qui respectivement transforment une chaîne en objet ou en objet en chaîne, la forme de chaîne permettant de stocker l'objet dans un fichier ou de le transmettre à une application JavaScript.

JSON, JavaScript et PHP

Formats alternatifs

On utilise JSON ou XML pour échanger des données avec un serveur en Ajax ou autrement.
Parmi les autres formats, citons YAML, plus complet mais aussi plus complexe et Protocol Buffers créé par Google pour ses serveurs.
Ce dernier s'intègre mieux dans les langages autres que JavaScript car, à partir d'un prototype qui décrit les données (ce seraient les lignes de menu dans notre exemple) , le compilateur crée des classes dans le langage C++ ou Java pour y accéder. Mais cela convient plutôt pour des données statiques.

Plus d'informations

Technologies de la programmation Ajax - API - Cassandra - CLI - Code HTTP - Cookie - Cover Flow - Dalvik - DFA - .NET - EDI (ou IDE) - Flash - GUI - JavaFX - JNA - JSON - MySQL - NaCl - NoSQL - Protocol Buffers - Qt - REST - Servlet - Web 2.0 - WebGL - Webkit - WinRT - Wysiwyg