Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

json-stringify-pretty-compact

lydell5.2mMIT4.0.0TypeScript support: included

The best of both JSON.stringify(obj) and JSON.stringify(obj, null, indent).

JSON, stringify, pretty, print, pretty-print, compact, indent, format, formatter

readme

json-stringify-pretty-compact

The output of JSON.stringify comes in two flavors: compact and pretty. The former is usually too compact to be read by humans, while the latter sometimes is too spacious. This module trades performance for a compromise between the two. The result is a pretty compact string, where “pretty” means both “kind of” and “nice”.

{
  "bool": true,
  "short array": [1, 2, 3],
  "long array": [
    {"x": 1, "y": 2},
    {"x": 2, "y": 1},
    {"x": 1, "y": 1},
    {"x": 2, "y": 2}
  ]
}

While the “pretty” mode of JSON.stringify puts every item of arrays and objects on its own line, this module puts the whole array or object on a single line, unless the line becomes too long (the default maximum is 80 characters). Making arrays and objects multi-line is the only attempt made to enforce the maximum line length; if that doesn’t help then so be it.

Installation

npm install json-stringify-pretty-compact
import stringify from "json-stringify-pretty-compact";

Note: This is an ESM only package. (I haven’t written that gist, but it’s a great resource.)

If you need CommonJS, install version 3.0.0. You won’t be missing out on anything: This package is done. No more features will be added, and no bugs have been found in years.

stringify(obj, options = {})

It’s like JSON.stringify(obj, options.replacer, options.indent), except that objects and arrays are on one line if they fit (according to options.maxLength).

options:

  • indent: Defaults to 2. Works exactly like the third parameter of JSON.stringify.
  • maxLength: Defaults to 80. Lines will be tried to be kept at maximum this many characters long.
  • replacer: Defaults to undefined. Works exactly like the second parameter of JSON.stringify.

stringify(obj, {maxLength: 0, indent: indent}) gives the exact same result as JSON.stringify(obj, null, indent). (However, if you use a replacer, integer keys might be moved first.)

stringify(obj, {maxLength: Infinity}) gives the exact same result as JSON.stringify(obj), except that there are spaces after colons and commas.

Want more options? Check out @aitodotai/json-stringify-pretty-compact!

License

MIT.

changelog

Version 4.0.0 (2022-05-14)

  • Changed: This is now an ESM only package. (I haven’t written that gist, but it’s a great resource.)

    If you need CommonJS, install version 3.0.0. You won’t be missing out on anything: This package is done. No more features will be added, and no bugs have been found in years.

Version 3.0.0 (2021-02-20)

  • Changed: The TypeScript definition is now closer to JSON.stringify. It’s slightly stricter, but I doubt you’ll notice a difference.
  • Added: "type": "commonjs", "exports": "./index.js", "types": "index.d.ts" to package.json. I doubt you’ll notice any difference from this either.

Version 2.0.0 (2019-02-02)

  • Removed: The margins option. Check out @aitodotai/json-stringify-pretty-compact if you miss it. This package is now purely a combination of JSON.stringify(obj) and JSON.stringify(obj, null, 2) with no additional formatting features on top of that.
  • Added: Support for the replacer argument.
  • Changed: Passing undefined to options now result in the default value being used. This is to align with how destructuring defaults work in ES2015.

Version 1.2.0 (2018-04-22)

  • Added: TypeScript definition. Thanks to @domoritz!

Version 1.1.0 (2018-01-12)

  • Added: The margins option. Thanks to @randallsquared!

Version 1.0.4 (2017-04-29)

  • Fixed: String contents are no longer accidentally modified in some cases. Thanks to @powellquiring!

Version 1.0.3 (2017-03-30)

  • No code changes. Just trying to get the readme to show on npmjs.com.

Version 1.0.2 (2016-09-08)

  • Improved: Limited npm package contents for a smaller download.

Version 1.0.1 (2014-11-03)

  • Fixed: Commas are now accounted for when calculating the available length of a line, so that they do not appear outside options.maxLength.

Version 1.0.0 (2014-11-01)

  • Initial release.