1.0.12 • Published 2 years ago

json-stringify-deterministic v1.0.12

Weekly downloads
20,858
License
MIT
Repository
github
Last release
2 years ago

json-stringify-deterministic

Last version Coverage Status NPM Status

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

Similar to json-stable-stringify but:

  • No Dependencies. Minimal as possible.
  • Better cycles detection.
  • Support serialization for object without .toJSON (such as RegExp).
  • Provides built-in TypeScript declarations.

Install

npm install json-stringify-deterministic --save

Usage

const stringify = require('json-stringify-deterministic')
const obj = { c: 8, b: [{ z: 6, y: 5, x: 4 }, 7], a: 3 }

console.log(stringify(obj))
// => {"a":3,"b":[{"x":4,"y":5,"z":6},7],"c":8}

API

stringify(<obj>, opts)

obj

Required Type: object

The input object to be serialized.

opts

opts.stringify

Type: function Default: JSON.stringify

Determinate how to stringify primitives values.

opts.cycles

Type: boolean Default: false

Determinate how to resolve cycles.

Under true, when a cycle is detected, [Circular] will be inserted in the node.

opts.compare

Type: function

Custom comparison function for object keys.

Your function opts.compare 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:

const stringify = require('json-stringify-deterministic')

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

console.log(objSerializer)
// => {"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:

const stringify = require('json-stringify-deterministic')

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

console.log(objtSerializer)
// => {"d":6,"c":5,"b":[{"z":3,"y":2,"x":1},9],"a":10}
opts.space

Type: string Default: ''

If you specify opts.space, it will indent the output for pretty-printing.

Valid values are strings (e.g. {space: \t}). For example:

const stringify = require('json-stringify-deterministic')

const obj = { b: 1, a: { foo: 'bar', and: [1, 2, 3] } }
const objSerializer = stringify(obj, { space: '  ' })
console.log(objSerializer)
// => {
//   "a": {
//     "and": [
//       1,
//       2,
//       3
//     ],
//     "foo": "bar"
//   },
//   "b": 1
// }
opts.replacer

Type: function

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

Related

License

MIT © Kiko Beats.

@infinitebrahmanuniverse/nolb-json-s@everything-registry/sub-chunk-1985voluptasimpedit@dotcontract/utils@docknetwork/credential-sdk@docknetwork/crypto-wasm-ts@docknetwork/dock-blockchain-api@docknetwork/sdk@deondigital/api-client@cowprotocol/app-data@bunchtogether/ffmpeg-process-manager@preply/babel-plugin-react-intl-auto-idipfs-logipfs-observed-removeipfs3some-bullshit-package-you-do-not-needtokenbaseut-port-sql@astariaxyz/sdk@builder.io/personalization-utils@acaldas/document-model@acaldas/document-model-libs@dao-xyz/peerbit-log@dao-xyz/ipfs-log@confluentinc/kafka-javascript@confluentinc/schemaregistryuse-compares@hyperjump/json-schema@gala-games/chain-api@gala-games/chain-cli@gala-chain/api@learncard/learn-cloud-plugin@learncard/learn-cloud-service@lumeweb/peer-discovery-irc@lumeweb/rpc-client@mwap/client@mwap/express@mwap/loaders@dylanvann/convert-image@intelligems/headless@jordangala/galachain-access@jsnative/leasm@olympeio/olympe-toolkit@olympeio/toolkit@olympeio/data-cloud-tools@preply/react-intl-webpack-plugin@numbereight/loggingmixtapejsmicrocryptomongoose-advanced-encryptionnawampnurondnuronfs-browsernuronfs-nodenuronium-browsernuronium-nodenuronjsnuron-coreobserved-removeobserved-remove-levelpassword-security-modulernpcselenium-federationselenium-federation-sheronft-mixtapejsrest-client-vuehouzy-database-seed-runnerlevel-observed-removeliblogin-clientliblogin-serv@xata.io/sql@tscircuit/autorouting-cache-engine@theirstoryinc/timedtext-remixer@transmute/transmute-did@transmute/es256k-jws-ts@transmute/lds-ecdsa-secp256k1-recovery2020@transmute/lds-ss256k@vdtn359/graphqlize-sql-mapperdendriadendria-corecachemunic0jsbygonzdocument-driveexplorer-corefugaquia
1.0.12

2 years ago

1.0.11

2 years ago

1.0.9

2 years ago

1.0.10

2 years ago

1.0.8

2 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

8 years ago

1.0.0

9 years ago