Security News
Introducing the Socket Python SDK
The initial version of the Socket Python SDK is now on PyPI, enabling developers to more easily interact with the Socket REST API in Python projects.
fast-json-stable-stringify
Advanced tools
deterministic JSON.stringify() to get deterministic hashes from stringified results
The fast-json-stable-stringify npm package is used to stringify JSON objects in a deterministic order, which is useful for tasks such as creating consistent hashes from JSON objects or ensuring consistent outputs in distributed systems. Unlike the native JSON.stringify, it guarantees the order of keys in the output string.
Deterministic JSON.stringify
This feature allows you to convert a JSON object into a string with keys sorted in a consistent order. The code sample shows the output of stringifying an object with unordered keys.
{"c":6,"b":[4,5],"a":3}
Custom comparator
This feature enables the use of a custom comparison function to determine the order of keys. The code sample demonstrates the output when a custom comparator is used to sort keys alphabetically.
{"a":3,"b":[4,5],"c":6}
This package offers similar functionality to fast-json-stable-stringify, providing a deterministic version of JSON.stringify. It is an earlier and more widely used package, but fast-json-stable-stringify claims to have performance improvements.
Similar to fast-json-stable-stringify, this package provides deterministic JSON stringification. It differs in that it does not include the jsonify dependency, which may be beneficial for certain build environments or for those looking to minimize their dependency tree.
deterministic version of JSON.stringify()
so you can get a consistent hash
from stringified results
You can also pass in a custom comparison function.
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}
var stringify = require('json-stable-stringify')
Return a deterministic stringified string str
from the object obj
.
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}
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
}
The replacer parameter is a function opts.replacer(key, value)
that behaves
the same as the replacer
from the core JSON object.
With npm do:
npm install json-stable-stringify
MIT
FAQs
deterministic `JSON.stringify()` - a faster version of substack's json-stable-strigify without jsonify
The npm package fast-json-stable-stringify receives a total of 37,114,001 weekly downloads. As such, fast-json-stable-stringify popularity was classified as popular.
We found that fast-json-stable-stringify demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
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.
Security News
The initial version of the Socket Python SDK is now on PyPI, enabling developers to more easily interact with the Socket REST API in Python projects.
Security News
Floating dependency ranges in npm can introduce instability and security risks into your project by allowing unverified or incompatible versions to be installed automatically, leading to unpredictable behavior and potential conflicts.
Security News
A new Rust RFC proposes "Trusted Publishing" for Crates.io, introducing short-lived access tokens via OIDC to improve security and reduce risks associated with long-lived API tokens.