Skip to content

Node.js 平台

JSON Packer 为 Node.js 环境提供了原生性能的 JSON 压缩功能。

安装

bash
npm install json-packer-napi
# 或
yarn add json-packer-napi
# 或
pnpm add json-packer-napi

API

核心函数

typescript
// 压缩为字节数组
export function compressToBytes(jsonString: string, options?: CompressOptions): Buffer;

// 压缩为 Base64 字符串
export function compressToBase64(jsonString: string, options?: CompressOptions): string;

// 从字节数组解压
export function decompressFromBytes(bytes: Buffer): string;

// 从 Base64 字符串解压
export function decompressFromBase64(base64: string): string;

配置选项

typescript
interface CompressOptions {
  enable_value_pool?: boolean;     // 是否启用字符串值池(默认 false)
  pool_min_repeats?: number;       // 计入值池的最小重复次数(默认 3)
  pool_min_string_len?: number;    // 计入值池的最小字符串长度(默认 8)
}

示例

基础用法

javascript
const { compressToBase64, decompressFromBase64 } = require('json-packer-napi');

const data = { name: "Alice", age: 30, active: true };
const jsonStr = JSON.stringify(data);

// 压缩
const compressed = compressToBase64(jsonStr);
console.log('Compressed:', compressed);

// 解压
const decompressed = decompressFromBase64(compressed);
const restored = JSON.parse(decompressed);
console.log('Restored:', restored);

ESM 导入

javascript
import { compressToBase64, decompressFromBase64 } from 'json-packer-napi';

const data = { items: ["apple", "banana", "cherry"] };
const compressed = compressToBase64(JSON.stringify(data));
const restored = JSON.parse(decompressFromBase64(compressed));

启用字符串值池

javascript
const { compressToBytes, decompressFromBytes } = require('json-packer-napi');

const data = {
  users: [
    { status: "connected", message: "connected to server" },
    { status: "connected", message: "connected to server" },
    { status: "connected", message: "connected to server" }
  ]
};

const options = {
  enable_value_pool: true,
  pool_min_repeats: 2,      // 重复 2 次以上进入值池
  pool_min_string_len: 5    // 字符串长度 >= 5 才考虑值池
};

const compressed = compressToBytes(JSON.stringify(data), options);
const restored = JSON.parse(decompressFromBytes(compressed));

console.log('Original size:', Buffer.byteLength(JSON.stringify(data), 'utf8'));
console.log('Compressed size:', compressed.length);

基于 MIT 许可证发布