References

Beginner-friendly references for web development, with live, editable examples.

The JavaScript JSON.stringify() method

Method JavaScript All modern browsers Updated
Quick answer

The JSON.stringify() method converts a JavaScript value into a JSON string. JSON.stringify({a: 1}) gives '{"a":1}'. You use it to send data to a server or save it in localStorage. Pass a third argument to pretty-print: JSON.stringify(obj, null, 2). Its inverse is JSON.parse().

Overview

JSON.stringify() turns a JavaScript object, array or value into a JSON-formatted string. This is how data leaves your program: you stringify it to send in a fetch() request body, to store in localStorage (which only holds strings), or to log a clean snapshot of an object.

The third argument controls formatting. JSON.stringify(obj, null, 2) pretty-prints with two-space indentation, which makes logs and files human-readable. The second argument, a replacer, can filter or transform which properties get included; pass an array of key names to keep only those.

A few things quietly get dropped or changed, and it's worth knowing them: undefined, functions and symbols are omitted from objects (and become null in arrays), and Date objects turn into ISO strings. It also throws on circular references. Round-tripping through JSON.stringify() then JSON.parse() is a common way to deep-copy plain data.

Syntax

const json = JSON.stringify(value)
const json = JSON.stringify(value, replacer, space)

JSON.stringify({ a: 1 })          // '{"a":1}'
JSON.stringify(obj, null, 2)      // pretty-printed

Parameters

The JSON.stringify() method accepts the following parameters.

Parameter Description
value The JavaScript value (object, array, etc.) to convert to a JSON string.
replacer Optional. A function to transform values, or an array of key names to keep. Use null to include everything.
space Optional. Indentation for pretty-printing: a number of spaces (e.g. 2) or a string.

Example

Live example
<pre id="out" style="font:15px ui-monospace,monospace"></pre>
<script>
  const user = { name: 'Ada', roles: ['admin', 'editor'] };

  const compact = JSON.stringify(user);
  const pretty  = JSON.stringify(user, null, 2);

  document.getElementById('out').textContent =
    compact + '\n\n' + pretty;
</script>

Best practices

  • Pretty-print for humans with JSON.stringify(obj, null, 2).
  • Always pair it with JSON.parse() when round-tripping data.
  • Remember undefined, functions and symbols are dropped, and dates become strings.
  • Wrap it in try/catch for data that might contain circular references, which throw.

Frequently asked questions

What does JSON.stringify() do?
It converts a JavaScript value into a JSON string, for sending to a server or storing as text.
How do I pretty-print JSON in JavaScript?
Pass an indentation as the third argument: JSON.stringify(obj, null, 2) indents with two spaces.
Why are some properties missing from the JSON?
Values of undefined, functions and symbols are dropped from objects. Dates are converted to ISO strings.
How do I deep-copy an object with JSON?
Use JSON.parse(JSON.stringify(obj)) for plain data, but note it loses functions, dates and undefined. structuredClone() preserves dates, undefined, Maps and Sets, though it still cannot clone functions.