IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Développons en Java v 2.20   Copyright (C) 1999-2021 Jean-Michel DOUDOUX.   
[ Précédent ] [ Sommaire ] [ Suivant ] [ Télécharger ]      [ Accueil ] [ Commentez ]


 

49. JSON

 

chapitre 4 9

 

Niveau : niveau 2 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 :

  • standard ouvert
  • syntaxe simple et compacte
  • facile à parser et à écrire
  • format offrant une structuration des données compacte

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 plate-formes.

JSON est utilisable avec de nombreux langages notamment Java grâce à plusieurs API open source.

Ce chapitre contient plusieurs sections :

 

49.1. La syntaxe de JSON

JSON ne définit que deux structures de données :

  • objet (object) est composé de paires nom/valeur
  • tableau (array) est une liste de valeurs

JSON supporte plusieurs types de données :

  • Numérique : nombre entier ou flottant
  • Chaîne de caractères : ensemble de caractères Unicode (sauf une double quote et un antislash) entouré par des doubles guillemets
  • Booléen : true ou false
  • Tableau : un ensemble ordonné de valeurs entouré par des crochets. Chaque valeur est séparée par un caractère virgule. Les types des valeurs d'un tableau peuvent être différents
  • Object : est composé de paires clé/valeur, chacune étant séparé par une virgule, entourées par des accolades. Une clé est obligatoirement une chaîne de caractères. Une valeur peut être : littérale (chaîne de caractères, nombre, true, false, null), un objet ou un tableau. Une clé est séparée de sa valeur par un caractère deux points
  • La valeur null

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 :

  • \" : une double quote
  • \\ : un antislash
  • \/ : un slash
  • \b : un backspace
  • \f : un formfeed
  • \n : une nouvelle ligne
  • \r : un retour chariot
  • \t : une tabulation
  • \unnnn : le caractère Unicode dont le numéro est nnnn
Exemple :
{ "prenom":"Jean-Michel" ,
  "ville":"Paris" }

Le séparateur d'un nombre flottant est le caractère point.

JSON utilise deux types de structures :

  • objet : un objet est défini entre accolades. Il est composé de paires nom/valeur, chacune étant séparée par une virgule. Dans une paire, le nom est séparé de sa valeur par un caractère deux points. Le nom est obligatoirement une chaîne de caractères
Exemple :
{ "prenom":"Jean-Michel" ,
  "ville":"Paris" }

  • tableau : est un ensemble ordonné de valeurs. Un tableau est défini entre crochet. Chaque valeur est séparée par une virgule
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 }

membres

paire
paire , membres

paire

string : valeur

tableau

[]
[ elements ]

elements

value
value , elements

value

string
nombre
objet
tableau
true
false
null

string

""
" chars "

chars

char
char chars

 

char

caractère Unicode sauf " et \
\"
\\
\/
\b
\f
\n
\r
\t
\u nnnn

nombre

int
int frac
int exp
int frac exp

int

digit
digit1-9 digits
- digit
- digit1-9 digits

frac

. digits

exp

e digits

digits

digit
digit digits

e

e
e+
e-
E
E+
E-


Les contenus binaires peuvent être intégrés dans une représentation JSON en les encodant en Base 64.

 

49.2. L'utilisation de JSON

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.org org.json.me Jackson JSON Processor
Json-lib Boon Stringtree
SOJO Jettison json-taglib
XStream Flexjson JON tools
Argo jsonij fastjson
mjson jjson json-simple
json-io JsonMarshaller google-gson
Json-smart FOSS Nova JSON Corn CONVERTER

 

49.3. JSON ou XML

JSON possède plusieurs points communs avec XML :

  • le format est textuel
  • la structure est hiérarchique
  • lisible facilement par un humain

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

Possibilité de définir une description du document (DTD ou schéma) permettant de le valider

 

JSON

La vitesse de traitement.

La simplicité de mise en oeuvre.

Plus compacte

Exploitable directement avec JavaScript

 

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 :

  • le modèle objet (object model) : il repose sur la création d'un graphe d'objets qui encapsule en mémoire la représentation des données JSON. Cette approche est très flexible car elle permet de naviguer et de modifier le modèle mais elle requiert de représenter tous les éléments en mémoire
  • le modèle en stream (streaming model) : avec cette approche, le parser émet des événements qu'il faut intercepter et traiter. La génération d'une représentation JSON se fait en ajoutant les éléments un par un.

 


Développons en Java v 2.20   Copyright (C) 1999-2021 Jean-Michel DOUDOUX.   
[ Précédent ] [ Sommaire ] [ Suivant ] [ Télécharger ]      [ Accueil ] [ Commentez ]