JSON en JavaScript : convertir des données en texte et l'inverse

JSON est le format d'échange de données du web. JavaScript le manipule avec deux méthodes seulement : stringify pour écrire, parse pour lire.
3 min de lecture
Believemy logo

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.

JAVASCRIPT
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);  // 99

Un 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'origineAprès un aller-retour
undefinedLa clé disparaît
Une fonctionLa clé disparaît
NaN, Infinitynull
Un objet DateUne chaîne au format ISO
Un Map, un SetUn 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.

Bon à savoir

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é.

JAVASCRIPT
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}"));       // null

Le couple try et catch est ici obligatoire, pas décoratif : sans lui, l'erreur remonte et interrompt le reste du traitement.


Questions fréquentes

Question

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.


Question

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.


Question

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.

Termes connexes

Découvrez notre glossaire JavaScript

Tous les mots de JavaScript expliqués simplement : mots-clés, objets natifs, méthodes, erreurs et concepts. Définitions claires et exemples qui tournent, pour apprendre et pour se dépanner.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.