https://github.com/jonathanlurie/serialize64
Typed Arrays serialization that just works and the JSON codec that goes with it. Node and browsers.
https://github.com/jonathanlurie/serialize64
base64 json serialization typedarrays umd
Last synced: 16 days ago
JSON representation
Typed Arrays serialization that just works and the JSON codec that goes with it. Node and browsers.
- Host: GitHub
- URL: https://github.com/jonathanlurie/serialize64
- Owner: jonathanlurie
- License: mit
- Created: 2021-02-19T09:06:32.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2021-03-31T22:03:23.000Z (about 4 years ago)
- Last Synced: 2025-03-12T23:13:39.091Z (about 1 month ago)
- Topics: base64, json, serialization, typedarrays, umd
- Language: JavaScript
- Homepage:
- Size: 1.26 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
Encodes typed arrays (*Uint8Array*, *Float32Array*, etc.) into base64 strings with a prefix that makes it decodable back into their original typed without having to store anything on the side.
There is also a JSON encoder provided.
# Install and import
```
npm install serialize64
```Import from a HTML file:
```HTML```
Import from ES6 module:
```js
import { Codec, JSON64 } from 'serialize64'
```# Example with simple typed arrays
All the examples are available in the [example folder](./examples).```js
// Some data
const someData = new Uint8Array([1, 2, 3, 4, 5, 6, 99])// encoding:
const someStrData = serialize64.Codec.encode(someData)
// the value is "_S64___ui8:AQIDBAUGYw=="// decoding:
const decoded = serialize64.Codec.decode(someStrData)
// the value is Uint8Array([1, 2, 3, 4, 5, 6, 99])
```# Example with JSON
```js
// Create some data:
const data = {
aString: 'hello there',
aNumber: 42,
anArray: [0, 'one', 'deux', 'tres', 4],
anObject: {
aUint8Array: new Uint8Array([1, 2, 3, 4, 5, 6, 7]),
aFloat32Array: new Float32Array([1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7]),
anotherArray: [
'a string',
422,
new Int32Array([-100000, 32, 9999999])
]
}
}// Encoding:
const json64Serialized = serialize64.JSON64.stringify(data, null, 2)// Decoding:
const dataDecoded = serialize64.JSON64.parse(json64Serialized)
```## Replacers and revivers
The *JSON64* serializer is using the regular *JSON* shipped with JS and it simply adds `Codec.encode()` and `Codec.decode()` as JSON replacers and revivers.
That being said, it is still possible to add your custom replacers and revivers **in addition to** the the one from Serialize64.```js
// Some data:
const data = {
aString: 'hello there',
aNumber: 42,
anArray: [0, 'one', 'deux', 'tres', 4],
anObject: {
aUint8Array: new Uint8Array([1, 2, 3, 4, 5, 6, 7]),
aFloat32Array: new Float32Array([1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7]),
anotherArray: [
'a string',
422,
new Int32Array([-100000, 32, 9999999])
]
}
}const replacer = (key, value) => {
return typeof value === 'number' ? value * 2 : value
}const reviver = (key, value) => {
return typeof value === 'number' ? value / 2 : value
}// Encoding:
const json64Serialized = serialize64.JSON64.stringify(data, replacer, 2)// Decoding:
const dataDecoded = serialize64.JSON64.parse(json64Serialized, reviver)
```Note that your custom replacer is performing just before the serialize64 replacer, while your custom reviver is performing just after the serialize64 reviver. This ensures that custom replacers/reviver that would apply some change on numerical data are still doing their job as expected and the custom ones who are performing actions on strings are not messing up with the internal representation of serialize64.