JavaScript Object Notation - Le format de données universel
System.initiate() → Loading complete █
JSON (JavaScript Object Notation) est un format de texte léger pour l'échange de données. Créé par Douglas Crockford au début des années 2000, JSON est devenu le standard de facto pour la communication entre applications web, APIs et services.
{
"nom": "JSON",
"type": "Format de données",
"annee": 2001,
"populaire": true
}
| Type | Description | Exemple |
|---|---|---|
| String (Chaîne) | Texte entre guillemets doubles | "Bonjour monde" |
| Number (Nombre) | Entier ou décimal | 42, 3.14 |
| Boolean (Booléen) | true ou false | true, false |
| Null | Valeur nulle | null |
| Object (Objet) | Collection de paires clé-valeur | {"key": "value"} |
| Array (Tableau) | Liste ordonnée de valeurs | [1, 2, 3] |
{
"utilisateur": {
"id": 1001,
"nom": "Alice Dupont",
"email": "alice@example.com",
"actif": true,
"roles": ["admin", "developer"],
"adresse": null
}
}
Un objet JSON est une collection non ordonnée de paires clé-valeur, entourée d'accolades { }.
Les objets peuvent être imbriqués à l'infini, permettant de représenter des structures de données complexes.
{
"entreprise": {
"nom": "TechCorp",
"fondation": 2010,
"siege": {
"ville": "Paris",
"pays": "France",
"codePostal": "75001"
},
"employes": 250,
"cotee": false
}
}
// JavaScript const data = JSON.parse(jsonString); console.log(data.entreprise.nom); // "TechCorp" console.log(data.entreprise.siege.ville); // "Paris" console.log(data.entreprise.employes); // 250
Les tableaux JSON sont des listes ordonnées de valeurs, entourées de crochets [ ].
Un tableau peut contenir n'importe quel type de données JSON, y compris d'autres tableaux ou objets.
{
"produits": [
{
"id": 1,
"nom": "Laptop Pro",
"prix": 1299.99,
"enStock": true,
"tags": ["informatique", "portable", "professionnel"]
},
{
"id": 2,
"nom": "Souris Gaming",
"prix": 79.99,
"enStock": true,
"tags": ["gaming", "peripherique"]
},
{
"id": 3,
"nom": "Écran 4K",
"prix": 599.99,
"enStock": false,
"tags": ["ecran", "4K"]
}
]
}
// JavaScript
const data = JSON.parse(jsonString);
// Accès par index
console.log(data.produits[0].nom); // "Laptop Pro"
// Parcourir le tableau
data.produits.forEach(produit => {
console.log(`${produit.nom}: ${produit.prix}€`);
});
// Filtrer les produits en stock
const enStock = data.produits.filter(p => p.enStock);
PHP offre des fonctions natives pour encoder et décoder JSON. Voici les principales fonctions :
<?php
// Tableau associatif PHP
$data = [
"utilisateur" => [
"nom" => "Jean Dupont",
"age" => 30,
"email" => "jean@example.com",
"actif" => true
],
"scores" => [95, 87, 92, 88]
];
// Convertir en JSON
$json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
echo $json;
?>
<?php
$jsonString = '{
"nom": "Alice",
"age": 25,
"hobbies": ["lecture", "sport", "musique"]
}';
// Décoder en tableau associatif
$data = json_decode($jsonString, true);
echo $data['nom']; // "Alice"
echo $data['age']; // 25
// Décoder en objet
$obj = json_decode($jsonString);
echo $obj->nom; // "Alice"
echo $obj->age; // 25
?>
JSON_PRETTY_PRINT : Formatage lisible avec indentationJSON_UNESCAPED_UNICODE : Pas d'échappement des caractères UnicodeJSON_UNESCAPED_SLASHES : Pas d'échappement des slashesJSON_NUMERIC_CHECK : Conversion automatique des nombres"Exemple généré dynamiquement par PHP:"
{
"serveur": "gapit.net",
"timestamp": "2026-11-04 13:20:18",
"php_version": "7.4.33",
"systeme": "Linux"
}
JavaScript possède un objet natif JSON avec deux méthodes principales :
// Objet JavaScript
const user = {
nom: "Marie",
age: 28,
actif: true,
roles: ["user", "moderator"],
parametres: {
theme: "dark",
langue: "fr"
}
};
// Convertir en chaîne JSON
const jsonString = JSON.stringify(user);
console.log(jsonString);
// Avec indentation
const formatted = JSON.stringify(user, null, 2);
console.log(formatted);
// Chaîne JSON
const jsonStr = '{"nom":"Pierre","age":35,"ville":"Lyon"}';
// Convertir en objet JavaScript
const obj = JSON.parse(jsonStr);
console.log(obj.nom); // "Pierre"
console.log(obj.age); // 35
console.log(obj.ville); // "Lyon"
// Gestion d'erreur
try {
const data = JSON.parse(invalidJson);
} catch (error) {
console.error("JSON invalide:", error.message);
}
| Erreur | Incorrect | Correct |
|---|---|---|
| Guillemets simples | {'nom': 'Jean'} |
{"nom": "Jean"} |
| Virgule finale | {"nom": "Jean",} |
{"nom": "Jean"} |
| Clé sans guillemets | {nom: "Jean"} |
{"nom": "Jean"} |
| Commentaires | {"nom": "Jean" // user} |
{"nom": "Jean"} |
| Valeur undefined | {"val": undefined} |
{"val": null} |
JSON est le format standard pour les APIs REST modernes. Voici comment travailler avec des APIs :
// GET Request
fetch('https://api.example.com/users')
.then(response => response.json())
.then(data => {
console.log('Données reçues:', data);
})
.catch(error => {
console.error('Erreur:', error);
});
// POST Request avec JSON
fetch('https://api.example.com/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
nom: 'Nouveau User',
email: 'user@example.com'
})
})
.then(response => response.json())
.then(data => console.log('Réponse:', data));
<?php
// API endpoint simple
header('Content-Type: application/json');
$method = $_SERVER['REQUEST_METHOD'];
if ($method === 'GET') {
$data = [
'status' => 'success',
'users' => [
['id' => 1, 'nom' => 'Alice'],
['id' => 2, 'nom' => 'Bob']
]
];
echo json_encode($data);
}
if ($method === 'POST') {
$input = json_decode(file_get_contents('php://input'), true);
$response = [
'status' => 'created',
'data' => $input
];
http_response_code(201);
echo json_encode($response);
}
?>
JSON Schema permet de définir la structure et les contraintes d'un document JSON.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "User",
"type": "object",
"required": ["nom", "email"],
"properties": {
"nom": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"email": {
"type": "string",
"format": "email"
},
"age": {
"type": "integer",
"minimum": 0,
"maximum": 150
}
}
}
// Mauvais : Parser plusieurs fois
const data1 = JSON.parse(jsonString);
const data2 = JSON.parse(jsonString);
// Bon : Parser une seule fois
const data = JSON.parse(jsonString);
const data1 = data;
const data2 = data;
// Streaming pour gros fichiers
const parser = require('stream-json');
const stream = fs.createReadStream('huge.json')
.pipe(parser());
{
"app": {
"name": "MonApp",
"version": "2.1.0",
"database": {
"host": "localhost",
"port": 3306,
"name": "mydb"
},
"features": {
"cache": true,
"debug": false
}
}
}
// Sauvegarder
const userData = {
preferences: { theme: 'dark', lang: 'fr' },
lastLogin: new Date().toISOString()
};
localStorage.setItem('user', JSON.stringify(userData));
// Récupérer
const stored = localStorage.getItem('user');
const user = JSON.parse(stored);
// package.json (Node.js)
{
"name": "my-project",
"version": "1.0.0",
"dependencies": {
"express": "^4.18.0"
},
"scripts": {
"start": "node server.js"
}
}