Développons en Java v 2.40 Copyright (C) 1999-2023 Jean-Michel DOUDOUX. |
|||||||
Niveau : | Elémentaire |
JSON est un format de données, basé sur du texte. JSON est l'acronyme de JavaScript Object Notation car c'est un dérivé de la représentation littérale d'un objet en JavaScript définit par l'ECMAScript Programming Language Standard.
Le format JSON est spécifié dans la RFC 4627. Il permet de sérialiser une structure de données au format texte. JSON est largement utilisé pour stocker des données ou échanger des données notamment sur Internet mais aussi entre les couches IHM et applicative/service d'une application.
JSON connait un fort engouement car il possède quelques points forts :
La syntaxe de JSON est très simple ce qui explique une partie de son succès. Elle ne définit que deux types de structure : un objet qui est un ensemble de paires clé/valeur et un tableau.
JSON définit 6 types de données : string, number, object, array, true, false et null.
Exemple : |
{ "nom": "Dupont",
"prenom": "Jean",
"ville": "Paris",
"pays": "France",
"telephone": [ { "mobile": "0612345678" },
{ "fax": "0312345678" } ]
}
JSON est couramment utilisé pour échanger (sérialiser/désérialiser) des données entre applications ou modules d'une application en utilisant le réseau. Ces applications peuvent être développées avec différents langages et exécutées sur différentes plates-formes.
JSON est utilisable avec de nombreux langages notamment Java grâce à plusieurs API open source.
Ce chapitre contient plusieurs sections :
JSON ne définit que deux structures de données :
JSON supporte plusieurs types de données :
Les valeurs d'un objet ou d'un tableau peuvent être d'un de ces types.
Dans une chaîne de caractères, le caractère d'échappement est le caractère antislash qui permet notamment de représenter dans la chaîne de caractères :
Exemple : |
{ "prenom":"Jean-Michel" ,
"ville":"Paris" }
Le séparateur d'un nombre flottant est le caractère point.
JSON utilise deux types de structures :
Exemple : |
{ "prenom":"Jean-Michel" ,
"ville":"Paris" }
Exemple : |
[{ "prenom":"prenom1", "nom":"nom1" },
{ "prenom":"prenom2" , "nom":"nom2" },
{ "prenom":"prenom3" , "nom":"nom3" }]
Une valeur peut être d'un des types supportés par JSON : ces structures peuvent donc être imbriquées.
Exemple : |
{ "groupe":
[{ "prenom":"prenom1" , "nom":"nom1" },
{ "prenom":"prenom2" , "nom":"nom2" },
{ "prenom":"prenom3" , "nom":"nom3" }]
}
Le tableau ci-dessous résume la syntaxe de JSON.
objet
membres
paire
tableau
elements
value
|
string
chars char
char
|
nombre
int
frac
exp
digits
e
|
Les contenus binaires peuvent être intégrés dans une représentation JSON en les encodant en Base 64.
JSON est essentiellement utilisé pour échanger ou stocker des données structurées.
Le type MIME d'un document JSON est application/json
JSON est fréquemment utilisé dans les requêtes AJAX car son exploitation par JavaScript est plus simple et plus rapide que XML.
JSON est indépendant de tout langage : de nombreuses bibliothèques existent pour de nombreux langages dont Java.
Il existe plusieurs API pour manipuler des documents au format JSON en Java :
JSON possède plusieurs points communs avec XML :
Contrairement à XML, JSON ne propose pas de standard pour décrire la structure des données, ce qui pourrait permettre de valider un document JSON.
Moins verbeux que XML, l'utilisation de JSON tent à se répendre notamment pour une utilisation combinée avec REST pour proposer des API facile à utiliser.
JSON est plus compact et facile à parser qu'un document XML équivalent. Un document JSON est cependant légèrement moins lisible.
Avantages |
Inconvénient |
|
XML |
XML est extensible XML permet de définir une structure particulière pour chaque document avec une unicité des tags en utilisant des namespaces Possibilité de définir une description du document (DTD ou schéma) permettant de le valider Utilisation possible d'attributs dans les tags |
La verbosité liée à l'utilisation de nom de tags et de leur redondance fréquente dans les tags Le coût de parsing des documents qui augmente avec la taille des documents |
JSON |
La vitesse de traitement La simplicité de mise en oeuvre Plus compacte Exploitable directement avec JavaScript |
Support d'un nombre limité de type de données Ne prend pas non plus en charge les métadonnées qui pourraint fournir des informations supplémentaires sur les données Difficultés de validation : JSON ne dispose pas de mécanisme intégré pour vérifier la structure, le format ou le contenu des données Faible sécurisation en tant que format de données pour les applications Web. JSON est vulnérable à diverses attaques, telles que le cross-site scripting (XSS), la falsification de requêtes intersites (CSRF) Pas de support des commentaires Encoding uniquement en UTF-8 |
Remarque : XML et JSON ne conviennent pas pour stocker directement des données binaires de taille importante.
L'exemple ci-dessous est la définition d'un menu : il s'agit d'un objet composé de membres qui sont un attribut et un tableau lequel contient d'autres objets, les éléments du menu.
Exemple : |
{
"menu": "Fichier",
"commandes": [
{
"title": "Nouveau",
"action":"NouveauDoc"
},
{
"title": "Ouvrir",
"action": "OuvrirDoc"
},
{
"title": "Fermer",
"action": "FermerDoc"
}
]
}
L'équivalent XML est le document ci-dessous :
Exemple : |
<?xml version="1.0" ?>
<root>
<menu>Fichier</menu>
<commands>
<item>
<title>Nouveau</value>
<action>NouveauDoc</action>
</item>
<item>
<title>Ouvrir</value>
<action>OuvrirDoc</action>
</item>
<item>
<title>Fermer</value>
<action>FermerDoc</action>
</item>
</commands>
</root>
Comme pour XML, il existe deux grands modèles de programmation pour générer ou parser des données aux formats Json :
Développons en Java v 2.40 Copyright (C) 1999-2023 Jean-Michel DOUDOUX. |