sort-jsonc

v1.0.2
Sort JSONC without mangling comments!
sort json jsonc json-comments comments

sort-jsonc

npm

✅ Sort JSONC (JSON with comments) without mangling comments!

Works with regular JSON too, of course!

See sort-jsonc-cli for the CLI version.

Usage

See the API reference for info on all options.

import { sortJsonc } from 'sort-jsonc';

// JSON with comments
const jsonc = `{
  "charlie": 0,
  /*
   * Big block comment explaining "nested"
   */
  "nested": {
    "caesar": 0, // Comment left of "nested.c"
    "adam": 0,
    "bertil": 0
  },
  "array": [
    { "amsterdam": 0, "baltimore": 0 },
    { "yankee": 0, "zulu": 0 }
  ],
  "bravo": 0,
  // Comment above "a"
  "alfa": 1
}`;

// Sort it alphabetically...
const sortedAlphabetically = sortJsonc(jsonc);

// ... or sort it by preferred key order...
const sortedPreferred = sortJsonc(jsonc, { sort: ['nested', 'array'] });

// ... or sort it however you want!
const sortedByKeyLength = sortJsonc(jsonc, { sort: (a, b) => a.length - b.length });
See example results
sortedAlphabetically
{
  // Comment above "a"
  "alfa": 1,
  "array": [
    {
      "amsterdam": 0,
      "baltimore": 0
    },
    {
      "yankee": 0,
      "zulu": 0
    }
  ],
  "bravo": 0,
  "charlie": 0,
  /*
   * Big block comment explaining "nested"
   */
  "nested": {
    "adam": 0,
    "bertil": 0,
    "caesar": 0 // Comment left of "nested.c"
  }
}
sortedPreferred
{
  /*
   * Big block comment explaining "nested"
   */
  "nested": {
    "adam": 0,
    "bertil": 0,
    "caesar": 0 // Comment left of "nested.c"
  },
  "array": [
    {
      "amsterdam": 0,
      "baltimore": 0
    },
    {
      "yankee": 0,
      "zulu": 0
    }
  ],
  // Comment above "a"
  "alfa": 1,
  "bravo": 0,
  "charlie": 0
}
sortedAlphabetically
{
  // Comment above "a"
  "alfa": 1,
  "array": [
    {
      "amsterdam": 0,
      "baltimore": 0
    },
    {
      "zulu": 0,
      "yankee": 0
    }
  ],
  "bravo": 0,
  /*
   * Big block comment explaining "nested"
   */
  "nested": {
    "adam": 0,
    "caesar": 0, // Comment left of "nested.c"
    "bertil": 0
  },
  "charlie": 0
}

Installation

npm yarn pnpm
npm install sort-jsonc yarn add sort-jsonc pnpm add sort-jsonc

API reference

sortJsonc(jsonc, options)

  sortJsonc(jsonc: string, options?: SortJsoncOptions): string

Sorts a JSON/JSONC string without mangling comments (can also remove them if wanted).

Sorts alphabetically by default, but can also sort by preferred key order or by a custom sort function.

Parameters

Name Type Description
jsonc string The JSONC string to sort.
options SortJsoncOptions Options for sorting. See below for more info.
Options
Name Type Default Description
sort CompareFn or string[] undefined Can be a compare function (like Array.sort) or a list of ordered keys. Sorts alphabetically if left blank.
spaces number 2 Number of spaces to indent the JSON. Same as the third parameter of JSON.stringify().
removeComments boolean false Whether to remove comments or not.
parseReviver Reviver undefined Reviver function, like the second parameter of JSON.parse().
stringifyReviver Reviver undefined Reviver function, like the second parameter of JSON.stringify().
npm i sort-jsonc

Metadata

  • MIT
  • >= 6
  • Daniel Grefberg
  • released 10/1/2024

Downloads

Maintainers