Socket
Socket
Sign inDemoInstall

json-stable-stringify-without-jsonify

Package Overview
Dependencies
0
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    json-stable-stringify-without-jsonify

deterministic JSON.stringify() with custom sorting to get deterministic hashes from stringified results, with no public domain dependencies


Version published
Weekly downloads
31M
decreased by-0.61%
Maintainers
1
Install size
14.9 kB
Created
Weekly downloads
 

Package description

What is json-stable-stringify-without-jsonify?

The json-stable-stringify-without-jsonify package is used for producing deterministic JSON strings from JavaScript objects. This means that it generates a JSON output where the order of object keys is consistent across different runs, even if the order of keys in the input object changes. This is particularly useful in scenarios where JSON string output needs to be predictable, such as in caching mechanisms or in generating cryptographic hashes from JSON data.

What are json-stable-stringify-without-jsonify's main functionalities?

Deterministic JSON Stringification

Converts an object into a JSON string with keys sorted in a stable order. This ensures that the JSON string output is the same regardless of how the object's properties are ordered.

{"a": 1, "b": 2}

Custom Comparator

Allows for custom sorting of the object keys by providing a comparator function. This can be used to control the order of keys in the resulting JSON string beyond the default lexicographical order.

{"opts": { "cmp": "(a, b) => a.key < b.key ? 1 : -1" }}

Cyclic Object Handling

Provides an option to handle cyclic references within objects. When set to true, it replaces cyclic references with a special string, allowing for the stringification of objects that would otherwise cause an error due to circular references.

{"opts": { "cycles": true }}

Other packages similar to json-stable-stringify-without-jsonify

Readme

Source

json-stable-stringify

This is the same as https://github.com/substack/json-stable-stringify but it doesn't depend on libraries without licenses (jsonify).

deterministic version of JSON.stringify() so you can get a consistent hash from stringified results

You can also pass in a custom comparison function.

browser support

build status

example

var stringify = require('json-stable-stringify');
var obj = { c: 8, b: [{z:6,y:5,x:4},7], a: 3 };
console.log(stringify(obj));

output:

{"a":3,"b":[{"x":4,"y":5,"z":6},7],"c":8}

methods

var stringify = require('json-stable-stringify')

var str = stringify(obj, opts)

Return a deterministic stringified string str from the object obj.

options

cmp

If opts is given, you can supply an opts.cmp to have a custom comparison function for object keys. Your function opts.cmp is called with these parameters:

opts.cmp({ key: akey, value: avalue }, { key: bkey, value: bvalue })

For example, to sort on the object key names in reverse order you could write:

var stringify = require('json-stable-stringify');

var obj = { c: 8, b: [{z:6,y:5,x:4},7], a: 3 };
var s = stringify(obj, function (a, b) {
    return a.key < b.key ? 1 : -1;
});
console.log(s);

which results in the output string:

{"c":8,"b":[{"z":6,"y":5,"x":4},7],"a":3}

Or if you wanted to sort on the object values in reverse order, you could write:

var stringify = require('json-stable-stringify');

var obj = { d: 6, c: 5, b: [{z:3,y:2,x:1},9], a: 10 };
var s = stringify(obj, function (a, b) {
    return a.value < b.value ? 1 : -1;
});
console.log(s);

which outputs:

{"d":6,"c":5,"b":[{"z":3,"y":2,"x":1},9],"a":10}

space

If you specify opts.space, it will indent the output for pretty-printing. Valid values are strings (e.g. {space: \t}) or a number of spaces ({space: 3}).

For example:

var obj = { b: 1, a: { foo: 'bar', and: [1, 2, 3] } };
var s = stringify(obj, { space: '  ' });
console.log(s);

which outputs:

{
  "a": {
    "and": [
      1,
      2,
      3
    ],
    "foo": "bar"
  },
  "b": 1
}

replacer

The replacer parameter is a function opts.replacer(key, value) that behaves the same as the replacer from the core JSON object.

install

With npm do:

npm install json-stable-stringify

license

MIT

Keywords

FAQs

Last updated on 15 Dec 2016

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc