JSON canonicalize function. Creates crypto safe predictable canocalization of JSON as defined by RFC8785
constcanonicalize=require('canonicalize');constjson={"from_account": "543 232 625-3","to_account": "321 567 636-4","amount": 500,"currency": "USD"}console.log(canonicalize(json));// output: {"amount":500,"currency":"USD","from_account":"543 232 625-3","to_account":"321 567 636-4"}constcanonicalize=require('canonicalize');constjson={"1": {"f": {"f": "hi","F": 5},"\n": 56.0},"10": {},"": "empty","a": {},"111": [{"e": "yes","E": "no"}],"A": {}}console.log(canonicalize(json));// output: {"":"empty","1":{"\n":56,"f":{"F":5,"f":"hi"}},"10":{},"111":[{"E":"no","e":"yes"}],"A":{},"a":{}}The function can be executed directly using npx without explicit installation. This allows JSON files and arbitrary input to be canonicalized with standard input/output:
# Input from file
npx canonicalize < input.json > output.json
# Input from stringecho'{ "from_account": "543 232 625-3", "to_account": "321 567 636-4", "amount": 500, "currency": "USD"}'| npx canonicalize > simple-data.json
# Input from web API
curl --silent https://pokeapi.co/api/v2/pokemon/pikachu | npx canonicalize > pikachu.jsonnpm install canonicalize --save
npm test