0.0.4 • Published 5 years ago

kvm-json v0.0.4

Weekly downloads
2
License
ISC
Repository
github
Last release
5 years ago

kvm-json

A JSON compression technique by splitting JSON object into Key, Value and Model.

npm i kvm-json

Features

  • Compress JSON into KVM model structure
  • Decompress KVM structure into origin JSON object
  • Extra compression using GZIP (can be disabled)
  • Debug mode (turn off compression)

Usage

Import kvm-json into your project

var kvm = require("kvm-json"),
  compress = kvm.compress,
  decompress = kvm.decompress;

Debug mode:

kvm.debugMode(); // or kvm.debugMode(true)

Disable GZIP, will return KVM JSON object:

kvm.disableGzip(); // or kvm.disableGzip(true)

Compression usage:

data = [
  {
    class: "motogp",
    rider: [
      {
        name: "Valentino Rossi",
        age: 39,
        bike_number: 46,
        world_champion: 7
      },
      {
        name: "Marc Márquez",
        age: 25,
        bike_number: 93,
        world_champion: 5
      },
      {
        name: "Jorge Lorenzo",
        age: 31,
        bike_number: 99,
        world_champion: 3
      }
    ]
  },
  {
    class: "moto2",
    rider: [
      {
        name: "Francesco Bagnaia",
        age: 21,
        bike_number: 63,
        world_champion: 1
      },
      {
        name: "Franco Morbidelli",
        age: 24,
        bike_number: 21,
        world_champion: 1
      },
      {
        name: "Pol Espargaró",
        age: 27,
        bike_number: 44,
        world_champion: 1
      }
    ]
  }
];
// original size =>  487 byte

compressed = compress(data);
console.log(compressed);

/**
 * KVM structure result : 
{
  "k": [ "class", "rider", "name", "age", "bike_number", "world_champion" ],
  "v": [ "motogp", "Valentino Rossi", 39, 46, 7, "Marc Márquez", 25, 93, 5, 
         "Jorge Lorenzo", 31, 99, 3, "moto2", "Francesco Bagnaia", 21, 63, 1, 
         "Franco Morbidelli", 24, "Pol Espargaró", 27, 44 ],
  "m": [
    {
      "0": 0,
      "1": [
        {
          "2": 1,
          "3": 2,
          "4": 3,
          "5": 4
        },
        {
          "2": 5,
          "3": 6,
          "4": 7,
          "5": 8
        },
        {
          "2": 9,
          "3": 10,
          "4": 11,
          "5": 12
        }
      ]
    },
    {
      "0": 13,
      "1": [
        {
          "2": 14,
          "3": 15,
          "4": 16,
          "5": 17
        },
        {
          "2": 18,
          "3": 19,
          "4": 15,
          "5": 17
        },
        {
          "2": 20,
          "3": 21,
          "4": 22,
          "5": 17
        }
      ]
    }
  ]
}
kvm size => 442 byte
 
Extra compression using gzip result:

"H4sIAAAAAAAAE1XOwWqEMBAG4FeROc/BxKirx0J7KBVKD70UWaIb3LCasXG3hV32YfoMfYR9sY7
RQksgCfkm/8wFDlC+QdvraQIEb3fG8+n0YPjQ3bw39mC27jQ0gT7J97ttu9fDaMlBjfAxJwx0pG5
kf9W9cUfrKHqhabKASYEqwxyh0r6NqtuXfz+ZM6BMsUgwRXgk35noibxxZ+J6gUWBCYZIyYkPXrv
WTC1Fd7pz2mr+KzBLUKxGUUW+4dH7nvtJhfBMfXQ/jdp32t+++S1HpXjUgUe9QAxljCDCXULJMQm
UEkFByW1TKNUVg6RBsiB5kM0qRRARBxIimJDXemaOF8nffLUUp0txthTna5LYLFosmv5XGS/DiaB
S/mrN6wf+PL6XvAEAAA=="
gzip compressed size => 402 byte

*
*/