JSON en JavaScript : Lire et Manipuler
Syntaxe, JSON.parse, JSON.stringify, fetch + JSON, localStorage — le format universel des API
C'est quoi JSON ?
JSON est un format texte pour échanger des données. C'est le format standard des API web — quand tu appelles une API, elle te renvoie du JSON. C'est aussi utilisé pour les fichiers de configuration (package.json, tsconfig.json…).
JSON est indépendant du langage. Il est utilisé par Python, Java, PHP, Go, Ruby… C'est la lingua franca des données sur le web.
Syntaxe JSON : les règles
| Type | Exemple JSON | Note |
|---|---|---|
| String | « bonjour » | Guillemets doubles uniquement |
| Number | 42, 3.14, -10 | Pas de NaN, Infinity, 0x… |
| Boolean | true, false | Minuscules |
| Null | null | undefined n'existe pas en JSON |
| Array | [1, « a », true] | Types mixtes OK |
| Object | Clés toujours entre guillemets doubles |
JSON.parse() — texte → objet
JSON.parse() convertit une chaîne JSON en objet JavaScript utilisable :
const user = JSON.parse(jsonString);
console.log(user.nom); // « Alice »
console.log(user.age); // 25
typeof user; // « object »
// Tableaux
const arr = JSON.parse('[1, 2, 3]');
console.log(arr[0]); // 1
// ⚠️ JSON invalide → erreur
JSON.parse(« pas du json »); // ❌ SyntaxError
JSON.parse(« »); // ❌ guillemets simples
safeParse(''); //
safeParse(« nope »); // null (pas de crash)
Entoure toujours JSON.parse() d'un try/catch quand le JSON vient d'une source externe (API, localStorage, utilisateur). Le JSON peut être invalide ou corrompu.
JSON.stringify() — objet → texte
JSON.stringify() convertit un objet JavaScript en chaîne JSON :
const json = JSON.stringify(user);
console.log(json); // ''
typeof json; // « string »
// JSON « pretty print » — indenté et lisible
const pretty = JSON.stringify(user, null, 2);
//
JSON.stringify(obj);
// ''
Les fonctions, undefined, Symbols sont silencieusement ignorés. Les Date sont converties en string ISO. Les Map/Set deviennent des objets vides. Si tu as besoin de sérialiser ces types, utilise un replacer custom.
Options avancées
// Avec un tableau : sélectionner les clés
const user = ;
JSON.stringify(user, [« nom », « age »]);
// '' — motDePasse exclu
// Avec une fonction : transformer les valeurs
JSON.stringify(user, (key, value) => );
// REVIVER — transformer les valeurs au parse
const json = '';
const data = JSON.parse(json, (key, value) => );
data.createdAt instanceof Date; // true
const original = ;
const clone = JSON.parse(JSON.stringify(original));
clone.b.c = 99;
original.b.c; // 2 — l'original n'est pas modifié
// ⚠️ Limites : perd les Date, fonctions, undefined, Map, Set…
// Alternative moderne (2022+) :
const clone2 = structuredClone(original); // gère Date, Map, Set…
structuredClone() (2022) est la méthode moderne pour le deep clone. Elle gère Date, Map, Set, ArrayBuffer, etc. Utilise le hack JSON uniquement si tu cibles d'anciens environnements.
JSON et fetch
async function getUsers()
// ENVOYER du JSON à une API (POST)
async function createUser(user)
createUser();
response.json() est un raccourci pour JSON.parse(await response.text()). Il retourne une Promise — n'oublie pas le await. Voir notre fiche Fetch API.
JSON et localStorage
localStorage ne stocke que des strings. Pour stocker des objets ou tableaux, tu dois les convertir en JSON :
const settings = ;
localStorage.setItem(« settings », JSON.stringify(settings));
// LIRE et parser
const raw = localStorage.getItem(« settings »);
const parsed = raw ? JSON.parse(raw) : null;
// Pattern complet avec valeur par défaut
function loadSettings()
// STOCKER un tableau
const cart = [, ];
localStorage.setItem(« cart », JSON.stringify(cart));
Erreurs fréquentes
| Erreur | Problème | Solution |
|---|---|---|
| Oublier JSON.stringify() dans localStorage | L'objet est stocké comme « [object Object] » | Toujours JSON.stringify avant setItem |
| Pas de try/catch sur JSON.parse() | Crash si le JSON est invalide | Toujours entourer d'un try/catch |
| Guillemets simples dans le JSON | SyntaxError | JSON exige des guillemets doubles |
| Virgule traînante (trailing comma) | SyntaxError | Pas de virgule après le dernier élément |
| Stocker des Date en JSON | Converties en string ISO, pas restaurées au parse | Utilise un reviver pour recréer les Date |
| Double stringify | JSON.stringify(JSON.stringify(obj)) = string échappée | Stringify une seule fois |
Questions fréquentes
🌐 Fetch API
⏳ Promesses & async/await
🧩 Destructuring
🔤 let, const, var
📦 Tableaux
⚡ Cours JavaScript complet
🏠 Hub Programmation
