1.0.11 • Published 6 years ago

weissman-json v1.0.11

Weekly downloads
16
License
MIT
Repository
github
Last release
6 years ago

weissman-json

A JSON compression library.

yarn add weissman-json

What it does

This library recursively scans an object, takes every key and value and stores them into an array, and replaces them with their array index.

To compress

import { compress } from 'weissman-json';

const uncompressed = {
  a: 'b',
  c: 'd',
  e: {
    a: 'b'
  },
  f: ['a', 'b', 'c']
};

const compressed = compress(uncompressed);

console.log(compressed);
/*
{
  v: ['a', 'b', 'c', 'd', 'e', 'f'],
  o: {
    0: 1,
    2: 3,
    4: {
      0: 1
    },
    5: [0, 1, 2]
  }
}
*/

To decompress/expand

import { expand } from 'weissman-json';

const compressed = {
  v: ['a', 'b', 'c', 'd', 'e', 'f'],
  o: {
    0: 1,
    2: 3,
    4: {
      0: 1
    },
    5: [0, 1, 2]
  }
};

const uncompressed = expand(compressed);

console.log(uncompressed);
/*
{
  a: 'b',
  c: 'd',
  e: {
    a: 'b'
  },
  f: ['a', 'b', 'c']
}
*/

For browser usage too!

<script src="weissman.js"></script>
<script>
  const json = { a: 'b', c: 'd' };
  const compressed = weissman.compress(json);
  console.log(compressed); //=> { o: { 0: 1, 2: 3 }, v: ['a', 'b', 'c', 'd'] }
</script>

Some caveats

The (compressed and then) expanded JSON will match the original, uncompressed JSON in keys and values, but the keys will not necessarily be in the same order as in the original JSON.

If for some reason you need the order of the keys to match, don’t use this library.

Why another JSON compression tool?

The ones I’ve tried don’t offer the same level of simplicity, compression, or speed. This tool can compress a 55MB json file down to 28MB in ~1000ms on my Macbook Pro, which was my use case. Also, there’s only two functions to know in order to be productive: compress(), and expand(). That’s it.

To run tests

yarn run jest

TODO

  • Introduce an option for multi-threaded compression.
1.0.11

6 years ago

1.0.10

6 years ago

1.0.9

6 years ago

1.0.8

6 years ago

1.0.7

6 years ago

1.0.6

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago