14/12/2024
Introduction à JSON
Prof. Naoual Berbiche
Introduction JSON
JSON (JavaScript Object Notation) est un format d’échange de données léger et donc performant. C’est un
format de texte indépendant de tout langage mais utilisant des conventions familières aux programmeurs
de la famille de langages C (incluant JavaScript et Python notamment).
JSON est une syntaxe pour sérialiser* des objets, tableaux, nombres, chaînes de caractères, booléens et
valeurs null. Elle est Sous forme de listes de propriétés lisibles par l'homme (clé/valeur).
Elle est basée sur la syntaxe de JavaScript mais en est distincte : du code JavaScript n’est pas
nécessairement du JSON, et du JSON n’est pas nécessairement du JavaScript.
La sérialisation est en informatique l’action de mettre des données sous forme binaire et de les écrire dans
un fichier.
Par convention, les objets JSON sont stockés dans des fichiers avec l'extension .json
1
14/12/2024
Utilisations de JSON
JSON est couramment utilisé pour :
[Link] Web : Échanger des données entre le client (navigateur ou application) et un serveur.
•Exemple : Lorsqu'une application mobile récupère des données d'un serveur.
[Link] de configurations : JSON est utilisé pour stocker des paramètres ou des
configurations.
•Ex. : Fichier [Link].
[Link] de données : Certaines bases comme MongoDB stockent les données au format
JSON (ou BSON, une version binaire de JSON).
4.Sérialisation de données : Convertir des objets en JSON pour les transmettre ou les
stocker.
Format JSON
Un objet JSON sous la forme d'un objet délimité par des accolades et
séparé par des virgules.
Une virgule n'apparaît pas après la propriété finale.
{ propriété1 ,
propriété2 ,
...
propriétéN }
Pour chaque propriété, le nom est exprimé sous forme de chaîne de
caractères en double quottes.
2
14/12/2024
Types JSON
String:
Représente du texte et est placé entre double guillemets .
Exemple : "nom": "Jean"
Number:
Représente des valeurs numériques. Il peut s'agir d'entiers ou de
nombres à virgule flottante.
Exemple : "age" : 25
Boolean :
Représente des valeurs vraies ou fausses.
Exemple : "isStudent" : true
Types JSON
Array:
Représente une liste ordonnée de valeurs. Mis entre crochets [].
Exemple : "notes" : [85, 92, 78, 90]
Object:
Représente une collection de paires clé-valeur. Inclus entre accolades.
Exemple : "adresse": {"street": "123 Main St", "city": "Example
City"}
Null:
Représente une valeur vide ou l'absence de valeur.
Exemple : "middleName": null
3
14/12/2024
Les espaces
• Les espaces (whitespace) sont autorisés et ignorés autour ou entre
les éléments syntaxiques.
• Quatre caractères sont considérés comme des espaces : espace,
tabulation horizontale et retour chariot.
• JSON ne prend pas en charge les commentaires.
Exemple d’un object
"phoneNumbers":
{ "firstName": "John",
[
"lastName": "Smith", {
"isAlive": true, "type": "home",
"age": 25, "number": "212 555-1234"
"address": },
{ { "type": "office",
"streetAddress": "21 2nd Street", "number": "646 555-4567"
"city": "New York", }
"state": "NY", ],
"children": [],
"postalCode": "10021-3100"
"spouse": null
},
}
4
14/12/2024
Exercice:
Créer un fichier JSON qui représente un tutoriel (titre, description, auteur) et
les commentaires des internautes portés sur ce tutoriel (nom d’utilisateur,
contenu, réponses).
Manipulation JSON dans différents langages
JSON étant un format universel, de nombreux langages proposent des bibliothèques pour
manipuler JSON.
// Exemple JSON
const jsonData = '{"nom": "Alice", "age": 25}';
JavaScript
// Convertir JSON en objet JavaScript
En JavaScript, JSON est intégré const objet = [Link](jsonData);
nativement via les méthodes [Link]([Link]); // "Alice"
[Link] et [Link].
// Convertir un objet JavaScript en JSON
const nouveauJson = [Link](objet);
[Link](nouveauJson); // '{"nom":"Alice","age":25}'
5
14/12/2024
Manipulation JSON dans différents langages
import json
# Exemple JSON
Python json_data = '{"nom": "Alice", "age": 25}'
Python utilise le module json pour # Convertir JSON en dictionnaire Python
lire et écrire du JSON. data = [Link](json_data)
print(data["nom"]) # "Alice"
# Convertir un dictionnaire Python en JSON
nouveau_json = [Link](data, indent=4)
print(nouveau_json)
import [Link];
Manipulation JSON dans
différents langages public class Main {
public static void main(String[] args) throws Exception {
String json = "{\"nom\":\"Alice\",\"age\":25}";
// Convertir JSON en objet Java
ObjectMapper mapper = new ObjectMapper();
Personne personne = [Link](json, [Link]);
Java [Link]([Link]); // "Alice"
En Java, des bibliothèques // Convertir un objet Java en JSON
comme Jackson ou Gson sont String nouveauJson = [Link](personne);
populaires pour manipuler JSON. [Link](nouveauJson);
}
}
class Personne {
public String nom;
public int age;
}
6
14/12/2024
Validation d'objets JSON
• La validation d'objets JSON consiste à vérifier que les données JSON
respectent un certain schéma ou format attendu. Cela garantit que les données
sont structurées correctement et conformes aux exigences spécifiques d'une
application ou d'un service.
• JSON Schema est un langage permettant de définir la structure et le contenu
des objets JSON.
• JSON Schema exprime un schéma sous forme d'objet JSON.
Méthodes pour valider JSON
a. Validation syntaxique b. Validation structurelle
Cette étape vérifie que le JSON est bien
Cette étape vérifie que le JSON respecte
formé.
un schéma défini :
• Les accolades {} et les crochets []
doivent être correctement appariés. • Les clés requises doivent être
• Les clés doivent être des chaînes présentes.
entourées de guillemets doubles ".
• Les types de données des valeurs
• Les valeurs doivent être dans un doivent correspondre à ceux spécifiés
format valide (string, number, boolean, dans le schéma.
null, array, ou object).
• Les contraintes spécifiques (comme une
longueur minimale ou maximale) doivent
être respectées.
7
14/12/2024
JSON Schema
{ "$schema": "[Link]
"title": "Person",
"description": "A person", Pour valider un json
"type": "object", comme:
"properties": { { "name": “Houda El
"name": { Alami",
"description": "A person's name", "age": 35
"type": "string" },
}
"age": {
"description": "A person's age",
"type": "number", "minimum": 18, "maximum": 64 }
},
"required": ["name", "age"]
}
Structure d’un JSON Schema
Un schéma JSON est lui-même un document JSON qui suit une structure définie. Voici ses composants
essentiels :
1. Propriétés de base :
2. Propriétés d’un objet JSON :
$schema : Spécifie la version de JSON Schema
utilisée. properties : Définit les clés et leurs types
attendus.
title : Un titre décrivant le schéma.
required : Liste des clés obligatoires.
description : Une description du schéma.
additionalProperties : Permet ou interdit
type : Détermine le type de données attendu des clés supplémentaires.
(string, integer, array, etc.).
8
14/12/2024
Structure d’un JSON Schema
3. Contraintes supplémentaires :
4. Structures complexes :
minLength / maxLength : Contraintes sur la
longueur des chaînes. items : Définit les éléments attendus dans un
tableau.
minimum / maximum : Contraintes sur les
nombres. oneOf / anyOf / allOf : Combinaison de
plusieurs schémas.
enum : Liste des valeurs acceptées.
$ref : Référence un autre schéma.
pattern : Une expression régulière à respecter.
Schéma :
JSON Schema simple
{
"$schema": "[Link]
"title": "Utilisateur",
"description": "Un objet représentant un utilisateur.",
"type": "object",
"properties": {
"id": {
"type": "integer",
"description": "Identifiant unique de l'utilisateur.",
"minimum": 1
},
Voici un schéma pour un objet JSON "nom": {
"type": "string",
représentant un utilisateur : "description": "Nom de l'utilisateur.",
"minLength": 1
},
"email": {
"type": "string",
"description": "Email de l'utilisateur.",
"format": "email"
},
"actif": {
"type": "boolean",
"description": "Si l'utilisateur est actif ou non."
}
},
"required": ["id", "nom", "email"],
"additionalProperties": false
}
9
14/12/2024
Validité du JSON
Exemple JSON valide :
{
"id": 123,
"nom": "Jean Dupont",
Les erreurs de validation incluront :
"email": "[Link]@[Link]",
"actif": true 1. id doit être ≥ 1.
} 2. nom ne peut pas être une chaîne vide.
3. email n’est pas au bon format.
Exemple JSON invalide :
4. actif n’est pas un booléen.
{
"id": -1,
"nom": "",
"email": "[Link]",
"actif": "oui"
}
Schéma :
{
"$schema": "[Link]
"title": "Liste d'utilisateurs",
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
Exemple avancé : Tableaux et références "type": "integer",
"minimum": 1
},
"nom": {
"type": "string",
"minLength": 1
Un schéma pour une liste },
d'utilisateurs avec des adresses : "adresses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ville": { "type": "string" },
"codePostal": { "type": "string", "pattern": "^[0-9]{5}$" }
},
"required": ["ville", "codePostal"]
}
}
},
"required": ["id", "nom"]
}
}
10
14/12/2024
[
{
"id": 1,
"nom": "Jean Dupont",
"adresses": [
Validité de l’exemple { "ville": "Paris", "codePostal":
"75001" },
{ "ville": "Lyon", "codePostal":
"69000" }
]
},
{
"id": 2,
"nom": "Marie Curie",
"adresses": [
{ "ville": "Marseille", "codePostal":
"13000" }
]
}
]
$id
Vous pouvez définir l'URI de base en utilisant le mot-clé $id à la racine
du schéma. La valeur de $id est une référence URI.
L'URI résultant est l'URI de base du schéma.
{
"$id": "/schemas/address",
"type": "object",
"properties": {
"street_address" ...
...
11
14/12/2024
$ref
Un schéma peut référencer un autre schéma à l'aide du mot-clé $ref. La
valeur de $ref est une référence URI qui est résolue par rapport à l'URI de base
du schéma.
"vegetables": {
"type": "array",
"items": { "$ref": "#/$defs/veggie" }
"shipping_address":{"$ref": "[Link]
"billing_address": { "$ref": "/schemas/address" }
...
}
enum
• Cet exemple présente le mot-clé de validation enum qui
est utilisé avec un tableau de valeurs
12
14/12/2024
enum
• Cet exemple présente le mot-clé de validation enum qui
est utilisé avec un tableau de valeurs
$defs
Parfois, nous avons de petits sous-schémas qui sont uniquement destinés à
être utilisés dans le schéma actuel.
Cela n'a pas de sens de les définir comme des schémas distincts.
Le mot-clé $defs nous donne un emplacement standardisé pour conserver les
sous-schémas destinés à être réutilisés dans le document de schéma actuel.
13
14/12/2024
Outils pour travailler avec JSON Schema
Éditeurs en ligne :
• JSON Schema Validator
• JSON Schema Linter
Bibliothèques de validation :
• Python : jsonschema
• JavaScript : Ajv
• Java : Everit JSON Schema
Références
• Cours Introduction à JSON – Prof. Karra – département informatique – ESTS
• [Link]
javascript/7911021-exploitez-des-donnees-au-format-json
• [Link]
• [Link]
• [Link]
14