/hashable

Generate consistent hashable JSON payload, great for piping through hash functions.

Primary LanguageJavaScriptMIT LicenseMIT

Node.js CI Node.js Package pages-build-deployment

hashable-cli

Generate consistent hashable JSON payload, great for piping through hash functions.

  • sort arrays by predefined keys
  • sort object by keys (optional)
  • works as command line tool, module and in browser
  • supports in-place modification of JSON file
  • great for storing JSON in Git

Try it in the browser at https://chernjie.github.io/hashable/

Command Line Usage

Installation

npm i -g hashable-cli

Example

via stdin

cat file.json | npx hashable-cli > sorted.json

as argument

npx hashable-cli file.json > sorted.json

as argument and in-place overwriting file

npx hashable-cli --in-place file.json

using priority option for sorting arrays

npx hashable-cli --priority=id,label file.json

Module Usage

Installation

npm i --save hashable-cli

Example

import hashable from 'hashable-cli'
import md5 from "md5"

const sorted1 = hashable({ a: 'b', c: ['e', 'd']}, { sortObject: true })
const sorted2 = hashable({ c: ['d', 'e'], a: 'b'}, { sortObject: true })

const hash1 = md5(JSON.stringify(sorted1))
const hash2 = md5(JSON.stringify(sorted2))

return hash1 === hash2

Options

Command Line Module Default Description
--in-place N/A false to overwrite the original JSON file
--sort-object sortObject false to sort object keys.
--priority priority see priority to specify array sorting priority (default priority is used if not specified). In CLI-mode, use comma-separated strings to specify multiple sort keys. e.g. --priority=id,label

License

see LICENSE

Alternatives you might prefer

  • safe-stable-stringify - Safe, deterministic and fast serialization alternative to JSON.stringify. Zero dependencies. ESM and CJS. 100% coverage.
  • json-stable-stringify - deterministic version of JSON.stringify() so you can get a consistent hash from stringified results
  • fast-json-stable-stringify - Deterministic JSON.stringify() - a faster version of @substack's json-stable-strigify without jsonify.
  • sort-keys - Useful to get a deterministically ordered object, as the order of keys can vary between engines.
  • json-hash - Generates hash for JSON objects.
  • fastest-stable-stringify - Deterministic JSON.stringify() - fastest stable JSON stringifier. This project combines fast-json-stable-stringify and fast-stable-stringify to create the fastest stable JSON stringifier
  • json-hashable - sorts object keys only, arrays remain the same. Returns a hash but no longer a strict equal of the input payload