Le format JSON
1. Caractéristiques
-
format compréhensible par un humain
-
syntaxe simple, concise et légère
-
pris en charge par de nombreux langages
-
dispose de types prédéfinis
-
absence de schéma
-
peu de types pris en charge : pas de type date, de type entier, etc.
-
pas de commentaire, et plus généralement, pas de méta-données : les données ne sont pas identifiées, leur signification doit être acquise par ailleurs, pas de possibilité de spécifier le charset et l’encodage
|
XML stocke données et méta-données : les données sont enrobées d’indications sémantiques qualitatives et quantitatives. Ainsi, il est possible de charger les données d’un fichier XML sans rien connaitre de son contenu, en se laissant guider, au fil de la lecture, par les méta-données. A contrario, JSON ne stocke pas de méta-données : il est donc nécessaire d’avoir une idée plus ou moins précise du contenu d’un fichier JSON pour pouvoir l’exploiter. |
2. Eléments constitutifs
-
les littéraux (types scalaires)
-
chaîne de caractères, entre guillemets :
"une chaine de caractères" -
nombre, (un seul et même type pour entiers et réels) :
3.14,-1,1E-10 -
booléen :
trueetfalse -
rien :
null
-
-
des aggrégations :
-
les listes :
[ "elem1", -1, 1.1, false ] -
les objets (collections de clé/valeur) :
{ "clé": "valeur", "clé2": 3.1 }
-
Exemples :
{
"album": "MTV Unplugged ",
"interpreter": "Maná",
"released": 1999,
"genre": "Latin rock",
"lang": "español"
"label": "WEA Latina",
"live": true
}
{ (1)
"firstName": "John",
"lastName": "Smith",
"address": { (2)
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [ (3)
"212-732-1234",
"646-123-4567"
]
}
| 1 | objet de niveau 0 |
| 2 | sous-objet de niveau 1 |
| 3 | liste |
Autre exemple :
{ # objet (niv 0)
"glucides": [ # liste (niv 1)
{ # objet (niv 2)
"kiwis": 0.3,
"mangues": 1.4,
"pommes": 0.7
},
"pâtes",
"pain"
],
"lipides": { # objet (niv 1)
"huile": [ colza, "olive", "arachide" ], # liste (niv 2)
"beurre": true
},
"protéines": [ # liste (niv 1)
[ "saumon", "sardine" ], # liste (niv 2)
[ "poulet", "boeuf", "porc" ] # liste (niv 2)
]
}
| Aucune possibilité de commenter un JSON, donc les commentaires ci-dessus ne font pas partie du JSON. |
Encore un autre exemple :
{
"id": "0001",
"type": "donut",
"name": "Cake",
"ppu": 0.55,
"batters":
{
"batter":
[
{ "id": "1001", "type": "Regular" },
{ "id": "1002", "type": "Chocolate" },
{ "id": "1003", "type": "Blueberry" },
{ "id": "1004", "type": "Devil's Food" }
]
},
"topping":
[
{ "id": "5001", "type": "None" },
{ "id": "5002", "type": "Glazed" },
{ "id": "5005", "type": "Sugar" },
{ "id": "5007", "type": "Powdered Sugar" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5003", "type": "Chocolate" },
{ "id": "5004", "type": "Maple" }
]
}