JSON

J'en ai souvent entendu parler, encore plus récemment. Je me suis donc penché sur la bête et j'ai découvert ce qu'est JSON. C'est un format de structure de données générique. Ca sert à quoi ? Et bien c'est la même chose que la sérialisation : sauvegarder des objets et variables à un instant donné.

C'est à mon goût une meilleure alternative au XML pour l'Ajax. Tout simplement parce qu'il n'y a pas de traitements à faire du coté de JavaScript, un simple eval() suffit. Du côté de PHP, ou tout autre langage web, c'est aussi simple et efficace puisqu'il existe des librairies ou des extensions pour encoder/décoder en JSON (PHP 5.2 intègre directement une extension permettant de le faire).

Un autre langage ? Pas du tout, les concepts de JSON sont rapidement assimilables, et justement sa force réside dans sa simplicité.

  • Tout d'abord une chaîne JSON (une fois encodée) est entourée d'accolades {}, ce qui correspond à un objet.
  • Dans cet objet on peut trouver des paires variable/valeur séparés par une virgule.
  • Une valeur peut être une chaîne de caractères, un nombre, un objet, un tableau, true, false ou null.
  • Les paires variable/valeur sont représenté grâce à une chaîne de caractère (la variable) séparée par deux points (:) puis une valeur associée (voir au dessus).
  • Un tableau est entouré de crochets [] et peut contenir une valeur (donc un autre tableau, ou des objets, vous voyez les possibilités ?). Les valeurs sont également séparées par des virgules.

Et c'est tout ! C'est vraiment très simple et la lecture est très facile par la suite, jugez par vous même :

{
	"title" : "json",
	"width" : 600,
	"position" : { "x" : 10, "y" : 30 },
	"text" : [
		"Exemple 1",
		1,
		{ "node" : "input", "size" : 30},
		true
	],
	"xhr" : true
}

J'ai pris un exemple complètement arbitraire, mais il montre clairement la puissance et la simplicité de cette notation. En JS un eval() là dessus donnera directement un objet. Pour accéder aux propriétés rien de plus simple : obj.title, obj.width, obj.position.x, obj.text[0], etc.

On peut également créer une classe avec cette notation, c'est ce que les frameworks JS proposent.
Par exemple :

var test = {
	title : "json",
	exec : function () {
		alert("1337");
	}
}

Pour obtenir title c'est comme avant : test.title. Pour éxécuter la fonction : test.exec(); (faudrait que j'essaye pour vérifier au moins).

Personnellement je l'adopte pour mes développement à venir (un certain Kargo à finir...), et vous ?

Commentaires

Adopté récemment sans savoir que ça s'appelait comme ça :)

C'est surtout interessant pour les échanges de données avec XHR, beaucoup plus que XML finalement.
Et c'est d'ailleurs ce que fait Netvibes : par exemple transformer les flux RSS en JSON (il existe des extensions et classes PHP qui le font très bien, c'est aussi possible en JS).
En revanche pour les classes je suis pas certain que ce soit une bonne solution (création et mise en mémoire de toutes les méthodes à chaque instance de l'objet, contrairement aux prototypes qui sont chargés seulement quand on les appelles). Enfin je me trompe peut être.
N'empèche que ça a l'air d'exister depuis un moment, la plupart des langages savent l'utiliser : www.json.org/jsonfr.html

"C'est à mon goût une meilleure alternative au XML pour l'Ajax."

"C'est surtout interessant pour les échanges de données avec XHR, beaucoup plus que XML finalement."

:-P

Par contre pour les classes je ne pense pas que ça permette d'instancier plusieurs objets justement, au contraire il est fait une fois avec JSON et pouf. Mais c'est vrai que je ne suis pas sur de voir l'intéret, peut-être plus lisible autrement...

Intéressant billet. Je vais aussi me pencher sur le sujet :)

Merde, ça m'apprendra à ne pas lire en entier un billet avant de commenter XD au moins on est du même avis !

Juste par souci du détail, il n'existe pas d'alternative au XML pour AJA-XML puis que le X d'AJAX signifie XML, il s'agit plutôt d'une alternative à AJAX.

Pour ceux qui aime se creuser la tête, vous pouvez chercher ce qu'est l'AJAH, une alternative à AJAX qui permet de ne pas avoir de traitement à faire côté client et qui permet également de ne pas avoir de nouvelle structure à assimiler, puisque la structure utilisé est le HTML. Il suffit alors d'utiliser Write, OuterHTML ou InnerHTML.

Bon, je viens de donner la réponse, il ne sera pas nécessaire de chercher ;-).

>Il suffit alors d'utiliser Write, OuterHTML ou InnerHTML.

Bouge pas, je vais vomir et je reviens ;)

@Nickko : C'est une blague ?
Et le but de JSON n'est pas vraiment d'être une alternative au XML, mais plutôt un moyen plus simple et rapide d'obtenir des données.
En clair :
XML = on reçoit, on parse, on utilise
JSON = on reçoit, ça marche tout de suite.
L'étape du parsing n'est pas négligeable pour moi, souvent trop lourd pour obtenir un résultat trop maigre (trop de traitement pour pas grand chose).

J'suis dans ma periode pro-xml, et ça m'a fait pensé à ton billet

> C'est à mon goût une meilleure alternative au XML pour l'Ajax. Tout simplement parce qu'il n'y a pas de traitements à faire du coté de JavaScript, un simple eval() suffit.

Avec XSLT, tu peux transformer ton fichier XML en JSON, et c'est super coule. En plus t'as des feuilles de styles XSLT toutes prètes : code.google.com/p/xml2jso...

Elle est pas belle la vie ?

Laissez le vôtre !

Les commentaires pour ce billet sont fermés.

À propos du billet

vendredi 2 février 2007 à 14:35

Classé dans :

9 commentaires

Navigation inter-billets