A powerful JSON enhancement library that supports all JSON primitives, Date, RegExp, Symbol, Functions, Map, Set, TypedArray and much more! Almost everything in JavaScript.
Write once. Run unit testing in Node and Browsers.
A perfect partner for unit testing, which allowing Node.js (or others) and e2e tests to share one copy of test suite. Please check more details in the enum-plus project.
This project was extracted from enum-plus. It was designed to serialize Enum objects from Browser to Node.js, so that the same test suites in Jest can be reused in Playwright e2e tests. We don't have to duplicate our test logic in the two testing frameworks. This project was also previously named serialize-everything.js
- Serialize and deserialize almost everything in JavaScript
- Interface with existing JSON APIs seamlessly
- Built-in support for circular references
- TypeScript support for better developer experience
- Function serialization
- Regular functions
- Arrow functions
- Async functions
- Generator functions
- Class methods
- Function properties
- Special values support
NaN,Infinity,-Infinity,-0undefined(in objects, following JSON semantics)
- Symbol handling
- Built-in symbols (like
Symbol.iterator) - Global symbols (via
Symbol.for) - Local symbols with descriptions
- Symbol as object keys
- Built-in symbols (like
- Advanced property handling
- Non-enumerable properties preservation
- Getter/setter methods (accessor properties)
- Property descriptors (writable, configurable, enumerable)
- Prototype chain handling
- Complete prototype chain serialization
- Preserves prototype methods and properties
- Browser and Node.js compatibility
- Automatic environment detection
- Buffer handling (falls back to Uint8Array in browsers)
- Raw JSON preservation
- Direct support for
JSON.rawJSON()objects
- Direct support for
- Custom API
- Support for custom serialization and deserialization logic
toJSON/fromJSONmethod respect- Automatic API method preservation
Install using npm:
npm install jsoneoInstall using pnpm:
pnpm add jsoneoInstall using bun:
bun add jsoneoOr using yarn:
yarn add jsoneo-
JSON Primitives:
stringnumberbooleanBigIntnullplain objectarray
-
Extended Types:
DateRegExpSymbolFunction- Normal functions
- Arrow functions
- Generator functions
- Async functions
- Classes
MapSetWeakMap(Structure only, without data)WeakSet(Structure only, without data)URLURLSearchParamsTypedArrayInt8ArrayUint8ArrayUint8ClampedArrayInt16ArrayUint16ArrayInt32ArrayUint32ArrayFloat32ArrayFloat64ArrayBigInt64ArrayBigUint64Array
ArrayBufferDataViewBufferErrorIterableRawJSON(viaJSON.rawJSON())
import { parse, stringify } from 'jsoneo';
const json = {
// String
name: 'John',
// Number
age: 30,
// Boolean
isAdmin: false,
// Date
createdAt: new Date(),
// RegExp
pattern: /abc/gi,
// BigInt
bigValue: 12345678901234567890n,
// Plain object
address: {
city: 'New York',
zip: '10001',
},
// Plain array
tags: ['developer', 'javascript'],
// Array with objects
projects: [
{
id: 1,
name: 'Project 1',
createdAt: new Date(),
},
{
id: 2,
name: 'Project 2',
createdAt: new Date(),
},
],
// URL
homepage: new URL('https://example.com?id=123'),
// Symbols
id: Symbol.for('id'),
[Symbol.toStringTag]: 'User',
// Map and Set
roles: new Map([
[Symbol.for('admin'), true],
[Symbol.for('editor'), false],
]),
permissions: new Set(['read', 'write']),
// TypedArray
bytes: new Uint8Array([1, 2, 3, 4]),
// ArrayBuffer
buffer: new ArrayBuffer(8),
// function
sayHello: () => `Hello, ${this.name}!`,
};
// Serialize
const serialized = stringify(json);
console.log('Serialized:', serialized);
// Deserialize
const deserialized = parse(serialized);
console.log('Deserialized:', deserialized);