Dès qu'une donnée quitte un programme, elle doit devenir du texte. Une requête réseau, un fichier de configuration, une valeur rangée dans le navigateur : tous ces canaux transportent des caractères, pas des objets.
JSON est le format qui a gagné cette place. Sa syntaxe vient de JavaScript, elle est lisible par un humain, et l'ensemble de son usage tient dans deux méthodes.
Définition
JSON, pour JavaScript Object Notation, est un format texte de représentation de données structurées. En JavaScript, l'objet natif JSON expose deux méthodes : stringify qui convertit une valeur en texte, et parse qui fait le trajet inverse.
const panier = { articles: 2, total: 98, paye: false };
const texte = JSON.stringify(panier);
console.log(texte);
// '{"articles":2,"total":98,"paye":false}'
const relu = JSON.parse(texte);
console.log(relu.total + 1); // 99Un troisième argument permet d'indenter la sortie, ce qui rend un fichier lisible : JSON.stringify(panier, null, 2). Le deuxième argument, plus rare, filtre les clés à conserver.
Ce que JSON ne sait pas transporter
Le format ne connaît que six sortes de valeurs : chaîne, nombre, booléen, tableau, objet et null. Tout le reste disparaît ou change de nature en silence.
| Valeur d'origine | Après un aller-retour |
|---|---|
undefined | La clé disparaît |
| Une fonction | La clé disparaît |
NaN, Infinity | null |
| Un objet Date | Une chaîne au format ISO |
| Un Map, un Set | Un objet vide |
Le cas de la date est le plus courant et le plus discret : après parse, la valeur est une String (chaîne de caractères), plus un objet. Il faut la reconstruire avec new pour retrouver ses méthodes.
Le nom des clés doit être entre guillemets doubles dans un fichier JSON, et une virgule finale est interdite. C'est la différence de syntaxe la plus fréquente avec un objet Object (objet) écrit en JavaScript.
Lire du texte reçu de l'extérieur
JSON.parse lève une erreur dès que le texte est mal formé, et une réponse réseau interrompue suffit à produire ce cas. L'appel doit donc être protégé.
function lire(texte) {
try {
return JSON.parse(texte);
} catch (erreur) {
console.log("JSON invalide :", erreur.message);
return null;
}
}
console.log(lire('{"ok":true}')); // { ok: true }
console.log(lire("{oups}")); // nullLe couple try et catch est ici obligatoire, pas décoratif : sans lui, l'erreur remonte et interrompt le reste du traitement.
Questions fréquentes
Peut-on copier un objet avec JSON ?
L'astuce JSON.parse(JSON.stringify(objet)) fonctionne et produit une copie profonde, mais elle perd tout ce que le format ne transporte pas : dates, fonctions, valeurs undefined. La fonction structuredClone(), disponible dans les navigateurs modernes et dans Node, fait le même travail sans ces pertes.
Pourquoi mes accents deviennent-ils illisibles ?
Ce n'est presque jamais JSON, qui travaille en UTF-8, mais l'en-tête envoyé avec la réponse ou l'encodage du fichier. Vérifiez que le serveur annonce bien application/json; charset=utf-8 avant de chercher plus loin, et que le fichier lui-même est enregistré en UTF-8.
JSON accepte-t-il les commentaires ?
Non, et c'est volontaire : le format a été conçu pour l'échange de données, pas pour la configuration lisible. C'est ce qui a conduit certains outils à accepter des variantes tolérantes, comme JSONC. Sur un fichier de configuration standard, un commentaire fera échouer JSON.parse avec une Error de syntaxe.