JSON ou JavaScript Object Notation est une représentation sans schéma, en texte clair, de données structurées basées sur des paires nom/valeur et des listes ordonnées. Même si le format JSON est dérivé de JavaScript, il est supporté soit nativement, soit par l'intermédiaire de bibliothèques dans la plupart des principaux langages de programmation.
JSON est couramment, mais pas exclusivement, utilisé pour échanger des informations entre clients et serveurs Web. Au cours des 15 dernières années, le format est devenu omniprésent sur le Web. Aujourd'hui, c'est le format privilégié pour presque tous les services Web accessibles au public, et il est également utilisé fréquemment pour les services Web privés. La popularité de JSON tient également au fait que ce format est pris en charge nativement par de nombreuses bases de données. PostgreSQL et MySQL sont désormais livrées avec un support natif pour stocker et interroger les données JSON. Les bases de données NoSQL comme MongoDB et Neo4j supportent également JSON, même si MongoDB utilise une version légèrement modifiée et binaire de JSON en arrière-plan.
Mais d’où vient le format JSON et quels sont ses avantages et ses inconvénients par rapport au XML ? Quand faut-il l’utiliser et quand faut-il envisager des alternatives ? Mais tout d'abord, voyons en pratique à quoi ressemble le JSON.
Exemple JSON
Voici un exemple de données encodées en JSON :
{
“firstName”: “Jonathan”,
“lastName”: “Freeman”,
“loginCount”: 4,
“isWriter”: true,
“worksWith”: [“Spantree Technology Group”, “InfoWorld”],
“pets”: [
{
“name”: “Lilly”,
“type”: “Raccoon”
}
]
}
La structure ci-dessus définit clairement certains attributs d'une personne. Il comprend un prénom et un nom de famille, le nombre de fois où la personne s'est connectée, la qualité de la personne, une liste des entreprises avec lesquelles elle travaille et une liste de ses animaux domestiques (un seul, dans ce cas). Une structure comme celle présentée ci-dessus peut être envoyée d'un serveur à un navigateur Web ou à une application mobile, lesquels effectueront ensuite certaines actions comme l'affichage des données ou leur sauvegarde pour référence ultérieure.
JSON est un format de données générique avec un nombre minimal de valeurs types : chaînes, nombres, booléens, listes, objets et null. Même si la notation est un sous-ensemble de JavaScript, ces types sont représentés dans tous les langages de programmation courants, si bien que, parce qu’il peut s’affranchir des lacunes linguistiques, le JSON est un format bien adapté pour transmettre des données entre langages de programmation.
Fichiers JSON
Les données JSON sont stockées dans des fichiers qui se terminent par l'extension .json. En accord avec le parti pris de JSON de faire en sorte que tout le code soit lisible en clair, ces fichiers sont simplement des fichiers texte simples et peuvent être facilement ouverts et examinés. Comme l'explique le blog SQLizer, ce principe est à la base de le grande interopérabilité de JSON, car à peu près tous les langages de programmation sont capables de lire et de traiter des fichiers texte simples, et ils sont faciles à envoyer sur Internet.
Pourquoi utiliser JSON ?
Pour comprendre l'utilité et l'importance de JSON, il est important de comprendre un peu l'histoire de l'interactivité sur le web. Au début des années 2000, l'interactivité sur le Web a commencé à se transformer. À l'époque, le navigateur servait principalement de client muet pour afficher l'information, et le serveur faisait tout le travail nécessaire pour préparer le contenu à afficher. Lorsqu'un utilisateur cliquait sur un lien ou un bouton dans le navigateur, une demande était envoyée au serveur, ce dernier préparait les informations nécessaires en HTML et le navigateur effectuait le rendu HTML comme s’il affichait une nouvelle page. Ce modèle était lent et inefficace, obligeant le navigateur à restituer tout ce qui se trouvait sur la page, même si une seule portion de la page avait changé.
Parce que les rechargements pleine page étaient coûteux, les développeurs Web se sont tournés vers d’autres technologies pour améliorer l'expérience globale de l'utilisateur. Entre-temps, la possibilité de faire des requêtes Web en arrière-plan pendant la présentation d'une page, introduite depuis peu dans Internet Explorer 5, apportait une solution viable pour charger progressivement les données en vue de leur affichage. Au lieu de recharger tout le contenu de la page, le fait de cliquer sur le bouton de rafraîchissement déclencherait une requête Web qui se chargerait en arrière-plan. Une fois le contenu chargé, les données pouvaient être manipulées, sauvegardées et affichées sur la page à l'aide de JavaScript, le langage de programmation universel des navigateurs.
REST vs. SOAP : La connexion JSON
A l'origine, ces données étaient transférées au format XML (voir l’exemple ci-dessous) en utilisant un protocole de messagerie appelé SOAP (Simple Object Access Protocol). Mais le XML était verbeux et difficile à gérer en JavaScript. Ce dernier avait déjà des objets, qui offrent une façon d'exprimer des données dans le langage. Le programmeur Douglas Crockford, déjà très impliqué dans le développement du langage Javascript, a donc pris un sous-ensemble de cette expression comme spécification pour créer un nouveau format d'échange de données et il l'a baptisé JSON. Il était beaucoup plus facile à lire pour les gens et à analyser pour les navigateurs.
Au cours des années 2000, une autre technologie de services Web, appelée Representational State Transfer, ou REST, a commencé à surpasser SOAP pour le transfert des données. L'un des grands avantages de la programmation avec des API REST, c’est qu’elle permet d’utiliser plusieurs formats de données - pas seulement XML, mais aussi JSON et HTML. Comme les développeurs web ont progressivement préféré utiliser JSON plutôt que XML, ils ont été amenés à utiliser REST plutôt que SOAP. Comme l’a déclaré le chercheur Kostyantyn Kharchenko (Département de conception de systèmes, Université technique nationale d'Ukraine, Institut polytechnique de Kiev sur le blog de Svitla, « à bien des égards, le succès de REST est dû au format JSON parce qu’il est facile à utiliser sur différentes plateformes ».
Aujourd'hui, JSON est le standard de facto pour l'échange de données entre les clients Web, mobiles et les services back-end.
JSON vs XML
Comme mentionné ci-dessus, la principale alternative au JSON est le XML. Cependant, le XML est de moins en moins répandu dans les nouveaux systèmes, et il est facile de comprendre pourquoi. À titre de comparaison, voilà ci-dessous les mêmes données exprimées en XML :
Jonathan
Freeman
4
true
Spantree Technology Group
InfoWorld
Lilly
Raccoon
En plus d'être plus verbeux (exactement deux fois plus verbeux dans le cas présent), XML introduit également une certaine ambiguïté lors de l'analyse syntaxique dans une structure de données compatible JavaScript. La conversion de XML en objet JavaScript peut nécessiter des dizaines à des centaines de lignes de code et a finalement besoin d’une personnalisation basée sur l'objet spécifique à analyser. Comparativement, la conversion de JSON en objet JavaScript nécessite une ligne de code et ne nécessite aucune connaissance préalable de l'objet à analyser.
Limites de JSON
Même si JSON est un format de données relativement concis et flexible, facile à utiliser dans de nombreux langages de programmation, il a néanmoins quelques inconvénients. On peut lister cinq limitations principales
1- Absence de schéma. Cela signifie d’une part que le développeur dispose d'une flexibilité totale pour représenter les données comme il le souhaite. Mais d'autre part, cela signifie qu’il peut très facilement créer sans le vouloir des données déformées.
2- Un type de nombre unique : le format à virgule flottante double précision IEEE-754. Cela signifie simplement qu’il n’est pas possible de tirer parti de la diversité et des nuances des types de nombres disponibles dans de nombreux langages de programmation.
3-Pas de type de date. Cette omission signifie que les développeurs doivent avoir recours à des représentations de dates sous forme de chaînes de caractères, ce qui entraîne des écarts de formatage, ou ils doivent représenter les dates en millisecondes à partir de la date d’origine (1er janvier 1970)
4- Pas de commentaires. Il est donc impossible d'annoter les champs en ligne, ce qui nécessite une documentation supplémentaire et augmente les risques de malentendus.
5- Verbosité. Même si JSON est moins verbeux que XML, ce n'est pas le format d'échange de données le plus concis. Pour les services à grand volume ou spéciaux, mieux vaut utiliser des formats de données plus efficaces.
À quel moment utiliser le format JSON ?
Si le logiciel que vous souhaitez développer communique avec un navigateur ou une application mobile native, il faut utiliser JSON comme format de données. Le choix d'un format comme le XML est dépassé et risque de tenir à l’écart les talents frontaux et mobiles que vous aimeriez attirer. Dans le cas d'une communication de serveur à serveur, il est peut être préférable d'utiliser un framework de sérialisation du genre Apache Avro ou Apache Thrift. JSON n'est pas un mauvais choix dans ce cas, et pourrait encore faire exactement ce que vous attendez. Mais la réponse n'est pas aussi claire que pour le web et la communication mobile.
Si vous utilisez des bases de données NoSQL, vous êtes à peu près contraint avec tout ce que vous donne la base de données. Dans le cas des bases de données relationnelles supportant JSON en tant que type, une règle pertinente consiste à l'utiliser aussi peu que possible. Les bases de données relationnelles ont été optimisées pour les données structurées qui correspondent à un schéma particulier. Si la plupart de ces bases supportent désormais des données plus flexibles sous la forme de JSON, il faut néanmoins s’attendre à un impact de performance quand vous recherchez des propriétés dans ces objets JSON.
JSON est de fait un format omniprésent pour l'envoi de données entre serveurs, navigateurs Web et applications mobiles. Sa conception simple et sa flexibilité font qu’il est facile à lire et à comprendre, et dans la plupart des cas, facile à manipuler dans le langage de programmation de votre choix. L'absence de schéma strict assure une flexibilité au format, mais cette flexibilité fait qu’il est parfois difficile pour le développeur d’être sûr qu’il lit et écrit correctement JSON.
Parser JSON
La partie du code d'une application qui transforme les données stockées au format JSON dans un format que l'application peut utiliser s'appelle un parser ou analyseur. Comme on peut s'y attendre, JavaScript inclut un analyseur natif, la méthode JSON.parse(). Cela demande peut être plus de travail pour utiliser JSON dans des langages fortement typées comme Scala ou Elm, mais la forte adoption de JSON montre qu'il existe des bibliothèques et des utilitaires pour aider le développeur dans les processus les plus difficiles. Le site Web json.org comprend une liste complète de bibliothèques de code qu’il peut utiliser pour analyser, générer et manipuler JSON, dans des langages aussi divers que Python, C# et même COBOL.
Utilitaires JSON
Plusieurs utilitaires en ligne permettent de manipuler ou d’examiner directement des données codées JSON, sans avoir à écrire de code. On trouve tous les équivalents programmatiques dans les bibliothèques de code précitées, mais il est possible de couper/coller du code JSON dans ces outils basés sur le navigateur pour vous aider à mieux comprendre JSON ou à effectuer une analyse rapide :
- JSON Formatter : JSONLint formate et valide du code JSON arbitraire.
- JSON Viewer : Stack.hu crée une arborescence interactive qui permet de comprendre la structure de votre code JSON.
- JSON Beautifier : Si vous voulez « imprimer » votre code JSON, avec la coloration syntaxique et autres, Prettydiff peut faire le job pour vous.
- JSON Converter : Vous avez besoin de convertir rapidement des données en format JSON vers un autre format ? Convertcsv.com offre des outils permettant de convertir JSON en CSV (qui peut être ensuite ouvert dans Excel) ou XML.
Tutoriel JSON
Vous voulez savoir comment mieux utiliser JSON dans vos applications interactives ? Le réseau de développeurs Mozilla Developer Network propose un excellent tutoriel qui vous permettra de démarrer avec JSON et JavaScript. Si vous êtes prêt à passer à d'autres langages, consultez le tutoriel sur l'utilisation de JSON avec Java (de Baeldung), avec Python (de DataCamp), ou avec C# (de Software Testing Help).