Qu’est-ce que JSON et comment l’utiliser ?
JSON (JavaScript Object Notation) est un format standardisé de représentation de données structurées. Bien que JSON soit né du langage de programmation JavaScript, il s’agit désormais d’une méthode omniprésente pour l’échange de données entre systèmes. La plupart des API modernes acceptent les requêtes JSON et renvoient des réponses JSON, il est donc bon d’avoir une bonne connaissance pratique du format et de ses fonctions.
Dans cet article, nous expliquerons ce qu’est JSON, comment il exprime divers types de données et comment vous pouvez le créer et l’utiliser dans les langages de programmation courants. Nous examinerons également certaines des limites de JSON et les alternatives qui ont émergé.
Principes de base de JSON
JSON a été initialement développé par Douglas Crockford en tant que format sans état pour le transfert de données entre les navigateurs et les serveurs. Au début des années 2000, les sites Web ont commencé à obtenir des données supplémentaires de manière asynchrone de leur serveur après le chargement initial de la page. En tant que format de texte basé sur JavaScript, JSON a facilité l’obtention et l’utilisation des données dans ces applications. La spécification a finalement été normalisée en tant que ECMA-404 en 2013 .
JSON est toujours passé sous forme de chaîne. Ces chaînes peuvent être décodées en un certain nombre de types de données de base, notamment des nombres, des booléens, des tableaux et des objets. Cela signifie que les hiérarchies d’objets et les relations peuvent être stockées pendant la transmission, puis réassemblées à l’extrémité de réception d’une manière adaptée à l’environnement de programmation.
Exemple JSON simple
Voici la représentation JSON de l’article de blog :
Cet exemple illustre tous les types de données JSON. Cela illustre également la brièveté des données JSON, l’une des caractéristiques qui les rend si attrayantes à utiliser dans une API. De plus, JSON est relativement facile à lire tel quel, contrairement aux formats plus verbeux tels que XML .
Types de données JSON
Six types de données peuvent être représentés nativement en JSON :
- Chaînes — les chaînes sont entourées de guillemets doubles ; les caractères peuvent être échappés avec une barre oblique inverse.
- Nombres – les nombres sont écrits sous forme de nombres sans guillemets. Vous pouvez inclure un composant fractionnaire pour désigner un nombre à virgule flottante. La plupart des implémentations de l’analyse JSON supposent un nombre entier lorsqu’il n’y a pas de point décimal.
- Les valeurs booléennes – les valeurs littérales
true
et sont prises en charge.false
- Null – Une
null
valeur littérale peut être utilisée pour indiquer une valeur vide ou manquante. - Tableaux. Un tableau est une simple liste entre crochets. Chaque élément de la liste est séparé par une virgule. Les tableaux peuvent contenir n’importe quel nombre d’éléments et peuvent utiliser tous les types de données pris en charge.
- Objets − Les objets sont créés par des accolades. Il s’agit d’un ensemble de paires clé-valeur, où les clés sont des chaînes entre guillemets doubles. Chaque clé a une valeur qui peut prendre n’importe lequel des types de données disponibles. Vous pouvez imbriquer des objets pour créer des hiérarchies en cascade. Chaque valeur doit être suivie d’une virgule pour indiquer la fin de cette paire clé-valeur.
Les analyseurs JSON convertissent automatiquement ces types de données en structures adaptées à leur langage. id
Par exemple, vous n’avez pas besoin de convertir manuellement en entier. L’analyse de l’intégralité de la chaîne JSON suffit pour mapper les valeurs au format de données d’origine.
Sémantique et Validation
JSON a certaines règles qui doivent être suivies lors de l’encodage des données. Les lignes qui ne correspondent pas à la syntaxe ne peuvent pas être analysées par les consommateurs.
Il est particulièrement important de prêter attention aux guillemets autour des chaînes et des clés d’objet. Vous devez également vous assurer qu’une virgule est utilisée après chaque entrée dans un objet ou un tableau. Cependant, JSON n’autorise pas une virgule après la dernière entrée – l’inclusion par inadvertance de l’une d’entre elles est une cause fréquente d’erreurs de validation. La plupart des éditeurs de texte mettent en évidence les problèmes de syntaxe pour vous aider à repérer les erreurs.
Malgré ces problèmes courants, JSON est l’un des formats de données les plus faciles à écrire à la main. La plupart des gens trouvent la syntaxe rapide et facile une fois qu’ils s’y sont familiarisés. En général, JSON est généralement moins sujet aux erreurs que XML, où des balises de début et de fin incompatibles, des déclarations de schéma non valides et des problèmes de codage causent souvent des problèmes.
Notation de contenu JSON
L’extension .json
est généralement utilisée lorsque JSON est enregistré dans un fichier. Le contenu JSON a un type MIME standardisé application/json
, bien text/json
qu’il soit parfois utilisé pour des raisons de compatibilité. Actuellement, vous devez vous fier aux en-têtes application/json
for Accept
et Content-Type
HTTP.
La plupart des API qui utilisent JSON encapsulent tout dans un objet de niveau supérieur :
Cependant, ce n’est pas obligatoire – un type littéral est valide en tant que nœud de niveau supérieur dans un fichier, donc tous les exemples suivants sont également valides pour JSON :
Ils seront décodés dans les scalaires correspondants dans votre langage de programmation.
Travailler avec JSON
La plupart des langages de programmation ont un support intégré pour JSON. Voici comment interagir avec les données JSON dans plusieurs environnements populaires.
Javascript
En JavaScript, les méthodes et JSON.stringify()
sont JSON.parse()
utilisées pour encoder et décoder les chaînes JSON :
PHP
Les fonctions équivalentes en PHP sont json_encode()
et json_decode()
:
Python
Python fournit respectivement à la json.dumps()
fois json.loads()
la sérialisation et la désérialisation :
Rubis
Ruby propose JSON.generate
également JSON.parse
:
Limites JSON
JSON est un format léger axé sur la transmission de valeurs dans votre structure de données. Cela permet une analyse rapide et est facile à utiliser, mais cela signifie qu’il y a des inconvénients qui peuvent être frustrants. Voici quelques-uns des plus gros problèmes.
Aucun commentaire
Les données JSON ne peuvent pas inclure de commentaires. Le manque d’annotations réduit la clarté et force la documentation à être publiée ailleurs. Cela peut rendre JSON inadapté à des situations telles que les fichiers de configuration où les modifications sont peu fréquentes et l’objectif des champs peut ne pas être clair.
Pas de régimes
JSON ne vous permet pas de définir un schéma pour vos données. id
Par exemple, il n’est pas possible de fournir un champ entier obligatoire. Cela peut entraîner une corruption involontaire des structures de données.
Aucun lien
Les champs ne peuvent pas faire référence à d’autres valeurs dans la structure de données. Cela conduit souvent à des répétitions, ce qui augmente la taille du fichier. En revenant à l’exemple d’article de blog de l’exemple précédent, vous pourriez avoir la liste suivante d’articles de blog :
Les deux messages ont le même auteur, mais les informations associées à cet objet ont dû être dupliquées. Dans un monde idéal, les implémentations d’un analyseur JSON pourraient produire la structure illustrée ci-dessus à partir d’entrées comme suit :
Ceci n’est actuellement pas possible avec le JSON standard.
Aucun type de données étendu
Les six types de données pris en charge manquent de nombreux types de valeur courants. JSON ne peut pas stocker nativement les dates, les heures ou les géolocalisations, vous devrez donc choisir votre propre format pour ces informations.
Cela provoque des incohérences gênantes et des cas extrêmes. Si votre application gère les horodatages sous forme de chaînes, telles que 2022-07-01T12:00:00+00:00
, mais qu’une API externe représente les horodatages en secondes après l’époque Unix 1657287000
, vous devez vous rappeler quand utiliser chacun des formats.
Alternatives JSON
YAML est la principale alternative à JSON. Il s’agit d’un sur-ensemble du format avec une représentation plus lisible, des types de données personnalisés et une prise en charge des liens. Il est destiné à résoudre la plupart des problèmes d’utilisabilité associés à JSON.
YAML s’est répandu dans les fichiers de configuration, ainsi que dans les outils DevOps, IaC et les outils de surveillance. Il est moins couramment utilisé comme format d’échange de données pour les API. La complexité relative de YAML signifie qu’il est moins accessible aux débutants. De petites erreurs de syntaxe peuvent provoquer des erreurs d’analyse déroutantes.
Les tampons de protocole (protobufs) sont un autre nouveau concurrent JSON pour la sérialisation des données structurées. Les protobufs ont des déclarations de type de données, des champs obligatoires et prennent en charge la plupart des principaux langages de programmation. Le système gagne en popularité en tant que moyen plus efficace de transférer des données sur les réseaux.
Sommaire
JSON est un format de représentation de données basé sur du texte qui peut encoder six types de données différents. JSON est devenu l’épine dorsale de l’écosystème de développement logiciel ; il est pris en charge par tous les principaux langages de programmation et est devenu le choix par défaut pour la plupart des API REST développées au cours des deux dernières décennies.
Bien que la simplicité de JSON fasse partie de sa popularité, elle impose également des limites à ce qui peut être réalisé avec le format. Le manque de prise en charge des schémas, des commentaires, des références d’objets et des types de données personnalisés signifie que certaines applications se retrouveront à dépasser les capacités de JSON. Des alternatives plus récentes telles que YAML et Protobuf ont aidé à résoudre ces problèmes, tandis que XML reste un concurrent pour les applications qui souhaitent définir le schéma de données et n’ont pas peur de la verbosité.
Laisser un commentaire