A lightweight way to serialize and deserialize complex data types non-destructively
Marshaller provides a lightweight way to serialize and deserialize complex data types non-destructively.
Essentially, it is JSON.parse()
and JSON.stringify
with support for far more data types, circular references, and with the guarantee that
whatever is serialized can be deserialized into the exact same representation without losing any information.
You can consider this to be direct replacements for the JSON.[stringify|parse]
methods, provided through marshall
for serialization and demarshall
for deserialization.
- "
JSON.parse
/JSON.stringify
on steroids" - Non-destructive serialization/deserialization of data
- Supports Circular references
- A wide variety of supported data types - from simple things as strings to complex things such as Maps, Sets and Typed Arrays
- Description
- Table of Contents
- Install
- Supported data types and features
- Usage
- Contributing
- Maintainers
- Backers
- FAQ
- License
$ npm install @wessberg/marshaller
$ yarn add @wessberg/marshaller
- Anything that is JSON serializable today:
number
,boolean
,string
,array
,object literal
- References, including circular references
RegExp
Date
Map
Set
Symbol
BigInt
undefined
null
Int8Array
Int16Array
Int32Array
UInt8Array
UInt8ClampedArray
UInt16Array
UInt32Array
Float32Array
Float64Array
String
Number
Boolean
import {marshall, demarshall} from "@wessberg/marshaller";
// Marshall some complex data that wouldn't normally be JSON serializable
const marshallResult = marshall({
a: new Set([1, 2, /foo/, {a: new Date(), b: new Float32Array([1, 2, 3])}])
});
// Demarshall it to get a structurally identical representation back of the data
const demarshallResult = demarshall(marshallResult);
Do you want to contribute? Awesome! Please follow these recommendations.
Frederik Wessberg @FredWessberg Lead Developer |
Become a backer and get your name, avatar, and Twitter handle listed here.
First, there are security considerations. But more importantly, functions can reference identifiers that lives in a lexical environment that is declared outside of the local scope of that function. Marshalling this data would require passing in a sandboxed environment which breaks the promise of the library - simple replacement for JSON, with non-destructive serialization/deserialization.
MIT © Frederik Wessberg (@FredWessberg) (Website)