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.
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
- Json.org. Le site fournit un lien sur un parseur pour chaque langage de programmation.
- RFC 4627. Spécification.
- Un type de donnée dans PostgreSQL. Pour le gestionnaire de base de données, concurrent gratuit de Oracle, un contenu JSON peut être un type de donnée au même titre que INTEGER ou TEXT. De nouvelles commandes sont ajoutées pour l'utiliser. On peut aussi exprimer le résultat d'une requête en JSON.
|
|
|
