Get to know MDN better
Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.
La méthode statique JSON.stringify() convertit une valeur JavaScript en une chaîne de caractères JSON, en remplaçant éventuellement des valeurs si une fonction de remplacement est définie ou en incluant éventuellement uniquement les propriétés définies si un tableau de remplacement est défini.
La valeur à convertir en chaîne de caractères JSON.
replacer FacultatifUne fonction qui modifie le comportement du processus de transformation, ou un tableau de chaînes de caractères et de nombres qui définit les propriétés de value à inclure dans le résultat. Si replacer est un tableau, tous les éléments de ce tableau qui ne sont pas des chaînes de caractères ou des nombres (qu'ils soient primitifs ou objets enveloppants), y compris les valeurs Symbol, sont complètement ignorés. Si replacer n'est ni une fonction ni un tableau (par exemple, null ou non fourni), toutes les propriétés de l'objet dont la clé est une chaîne de caractères sont incluses dans la chaîne de caractères JSON résultante.
space FacultatifUne chaîne de caractères ou un nombre utilisé pour insérer des espaces (y compris l'indentation, les caractères de saut de ligne, etc.) dans la chaîne de caractères JSON produite afin d'en faciliter la lecture.
Si c'est un nombre, il indique le nombre d'espaces à utiliser pour l'indentation, limité à 10 (c'est-à-dire que toute valeur supérieure à 10 est traitée comme si elle était 10). Les valeurs inférieures à 1 signifient qu'aucun espace ne sera utilisé.
Si c'est une chaîne de caractères, la chaîne de caractères (ou les 10 premiers caractères de la chaîne de caractères, si elle est plus longue) est insérée avant chaque objet ou tableau imbriqué.
Si space n'est ni une chaîne de caractères ni un nombre (qu'il s'agisse d'un primitif ou d'un objet enveloppant) — par exemple, null ou non fourni — aucun espace n'est utilisé.
Une chaîne de caractères JSON qui représente la valeur indiquée.
Levée dans l'un des cas suivants :
JSON.stringify() convertit une valeur en la notation JSON que cette valeur représente. Les valeurs sont converties en chaîne de caractères de la manière suivante :
Toutes les propriétés dont la clé est un Symbol seront complètement ignorées, même lors de l'utilisation du paramètre replacer.
Si la valeur possède une méthode toJSON(), c'est à elle de définir quelles données seront sérialisées. Au lieu de sérialiser l'objet, la valeur retournée par la méthode toJSON() lors de son appel sera sérialisée. JSON.stringify() appelle toJSON avec un paramètre, key, qui a la même sémantique que le paramètre key de la fonction replacer :
Tous les objets Temporal implémentent la méthode toJSON(), qui retourne une chaîne de caractères (identique à l'appel de toString()). Ainsi, ils seront sérialisés comme des chaînes de caractères. De même, les objets Date implémentent toJSON(), qui retourne la même chose que toISOString().
Seules les propriétés propres énumérables sont parcourues. Cela signifie que Map, Set, etc. deviendront "{}". Vous pouvez utiliser le paramètre replacer pour les sérialiser de manière plus utile.
Les propriétés sont parcourues en utilisant le même algorithme que Object.keys(), qui a un ordre bien défini et stable entre les implémentations. Par exemple, JSON.stringify sur le même objet produira toujours la même chaîne de caractères, et JSON.parse(JSON.stringify(obj)) produira un objet avec le même ordre de clés que l'original (à condition que l'objet soit entièrement sérialisable en JSON).
Le paramètre replacer peut être soit une fonction, soit un tableau.
S'il s'agit d'un tableau, ses éléments indiquent les noms des propriétés de l'objet à inclure dans la chaîne de caractères JSON résultante. Seules les valeurs de type chaînes de caractères et nombres sont prises en compte ; les clés de type symbole sont ignorées.
S'il s'agit d'une fonction, elle prend deux paramètres : la clé (key) et la valeur (value) à convertir en chaîne de caractères. L'objet dans lequel la clé a été trouvée est fourni comme contexte this de la fonction replacer.
La fonction replacer est également appelée pour l'objet initial à convertir, auquel cas la clé (key) est une chaîne vide (""). Elle est ensuite appelée pour chaque propriété de l'objet ou du tableau à convertir. Les indices de tableau seront fournis sous forme de chaîne de caractères comme key. La valeur de la propriété courante sera remplacée par la valeur de retour de la fonction replacer pour la conversion en chaîne de caractères. Cela signifie :
Note : Lors de l'analyse du JSON généré avec des fonctions replacer, vous souhaiterez probablement utiliser le paramètre reviver pour effectuer l'opération inverse.
En général, l'indice des éléments du tableau ne changera jamais (même si l'élément est une valeur invalide comme une fonction, il deviendra null au lieu d'être omis). Utiliser la fonction replacer vous permet de contrôler l'ordre des éléments du tableau en retournant un tableau différent.
Le paramètre space peut être utilisé pour contrôler les espacements dans la chaîne de caractères finale.
Chaque niveau d'indentation ne dépassera jamais 10. Les valeurs numériques de space sont limitées à 10, et les chaînes de caractères sont tronquées à 10 caractères.
Si vous souhaitez que le replacer distingue l'objet initial d'une propriété dont la clé est une chaîne de caractères vide (puisque les deux donneraient la chaîne vide comme clé et potentiellement un objet comme valeur), vous devrez suivre le nombre d'itérations (si celui-ci dépasse la première itération, il s'agit d'une véritable clé vide).
Indenter la sortie avec un espace :
Utiliser un caractère de tabulation imite l'apparence standard de l'impression soignée :
Définir toJSON() pour un objet permet de remplacer son comportement de sérialisation.
Comme le format JSON (angl.) ne prend pas en charge les références d'objet (bien qu'un brouillon IETF existe), une erreur TypeError sera levée si l'on tente d'encoder un objet contenant des références circulaires.
Pour sérialiser des références circulaires, vous pouvez utiliser une bibliothèque qui les prend en charge (par exemple, cycle.js(angl.) de Douglas Crockford) ou implémenter vous‑même une solution, ce qui nécessitera de trouver et remplacer (ou supprimer) les références cycliques par des valeurs sérialisables.
Si vous utilisez JSON.stringify() pour effectuer une copie profonde d'un objet, vous pouvez préférer utiliser structuredClone(), qui prend en charge les références circulaires. Les API des moteurs JavaScript pour la sérialisation binaire, telles que v8.serialize()(angl.), prennent également en charge les références circulaires.
Dans le cas où vous souhaitez stocker un objet créé par votre utilisateur et permettre sa restauration même après la fermeture du navigateur, l'exemple suivant illustre l'utilisation de JSON.stringify() :
Les moteurs implémentant la spécification JSON.stringify bien formée (angl.) convertiront les substituts isolés (tout point de code compris entre U+D800 et U+DFFF) en chaînes de caractères à l'aide de séquences d'échappement Unicode plutôt que littéralement (en produisant des substituts isolés). Avant cette modification, ces chaînes de caractères ne pouvaient pas être encodées en UTF-8 ou UTF-16 valides :
Mais avec cette modification, JSON.stringify() représente des substituts isolés à l'aide de séquences d'échappement JSON qui peuvent être encodées en UTF-8 ou UTF-16 valides :
Cette modification devrait être rétrocompatible tant que vous transmettez le résultat de JSON.stringify() à des API telles que JSON.parse() qui acceptent tout texte JSON valide, car elles traiteront les échappements Unicode des surrogats isolés comme identiques aux surrogats isolés eux-mêmes. Ce n'est que si vous interprétez directement le résultat de JSON.stringify() que vous devez traiter avec soin les deux encodages possibles de ces points de code par JSON.stringify().
| ECMAScript® 2027 Language Specification # sec-json.stringify |
Activez JavaScript pour afficher ce tableau de compatibilité des navigateurs.
Cette page a été modifiée le 27 févr. 2026 par les contributeur·ice·s du MDN.
Votre modèle pour un internet meilleur.
Visitez la société mère à but non lucratif de Mozilla Corporation, la Fondation Mozilla.
Certaines parties de ce contenu sont protégées par le droit d'auteur ©1998—2026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.