json-fingerprint

Fingerprint JSON

MIT License

Downloads
194
Stars
1

json-fingerprint

Fingerprint JSON by calculating the hash (default: sha256) based on the shape of the JSON and its value types.

Install

npm install json-fingerprint

Usage

import {fingerprintJSON} from 'json-fingerprint';
const {hash, jsonPaths} = fingerprintJSON(`{"foo":"bar"}`)
// hash = 3e61d854042bcd6273a8e18589eb53a37e4cdc111bd2dc717413951637c11e2d
// jsonPaths = ['$:object', '$.foo:string']

const {hash, jsonPaths} = fingerprintJSON(`{"foo":"some string"}`)
// hash = 3e61d854042bcd6273a8e18589eb53a37e4cdc111bd2dc717413951637c11e2d
// jsonPaths = ['$:object', '$.foo:string']

Options

// JSON input
fingerprintJSON(`{"foo":"bar"}`)

// object input
fingerprintJSON({"foo":"bar"})

// custom hash function
fingerprintJSON(`{"foo":"bar"}`, myCustomHashFn)

Result

const {hash, jsonPaths, source} = fingerprintJSON(`{"foo":"bar"}`)
  • hash: fingerprint hash of the JSON
  • jsonPaths: internal JSON meta data (hash is calculated based on stringified jsonPaths)
  • source: original JSON provided as input

Custom hash function

import { createHash } from 'node:crypto';

function sha512(data) {
  /**
   * https://nodejs.org/api/crypto.html#cryptocreatehashalgorithm-options
   * `openssl list -digest-algorithms` to display the available digest algorithms
   */
  return createHash('sha512').update(data).digest('hex');
}

fingerprintJSON(`{"foo":"bar"}`, sha512);

CLI

hash a JSON file

npx json-fingerprint --file=package.json
$ 8d04433255d9cd89eb54dcb09b43d0be92ca5b5f5ba9dffee274869f6b9a9158

pipe to json-fingerprint

cat package.json | npx json-fingerprint
$ 8d04433255d9cd89eb54dcb09b43d0be92ca5b5f5ba9dffee274869f6b9a9158
curl -sL https://github.com/chimurai/json-fingerprint/raw/main/package.json | npx json-fingerprint
$ 8d04433255d9cd89eb54dcb09b43d0be92ca5b5f5ba9dffee274869f6b9a9158
wget -qO - https://github.com/chimurai/json-fingerprint/raw/main/package.json | npx json-fingerprint
$ 8d04433255d9cd89eb54dcb09b43d0be92ca5b5f5ba9dffee274869f6b9a9158

CLI options

--file

--hash (default: sha256)

cat package.json | npx json-fingerprint --hash=md5
$ 4c86eaaa836218a1d5e6673e7f89303e
curl -sL https://github.com/chimurai/json-fingerprint/raw/main/package.json | npx json-fingerprint --hash=md5
$ 4c86eaaa836218a1d5e6673e7f89303e

--help

--version