dernière modification : 2023

Le format JSON

1. Caractéristiques

Les plus
  • 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

Les moins
  • 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 : true et false

    • 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 :

1 objet
{
  "album": "MTV Unplugged ",
  "interpreter": "Maná",
  "released": 1999,
  "genre": "Latin rock",
  "lang": "español"
  "label": "WEA Latina",
  "live": true
}
1 objet composé de sous-objets et de listes
{                                           (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" }
    ]
}