āā āāāāāāā āāāāāā āāā āā āāāāā āāāāāāā
āā āā āā āā āāāā āā āā āā āā
āā āāāāāāā āā āā āā āā āā āāāāā āāāāāāā āāāāāāā
āā āā āā āā āā āā āā āā āā āā āā
āāāāā āāāāāāā āāāāāā āā āāāā āā āā āāāāāāā
AssemblyScript - v1.0.0-beta.2
š Contents
š About
JSON is the de-facto serialization format of modern web applications, but its serialization and deserialization remain a significant performance bottleneck, especially at scale. Traditional parsing approaches are computationally expensive, adding unnecessary overhead to both clients and servers. This library is designed to mitigate this by leveraging SIMD acceleration and highly optimized transformations.
š¾ Installation
npm install json-as@1.0.0-beta.2
Add the --transform
to your asc
command (e.g. in package.json)
--transform json-as/transform
Alternatively, add it to your asconfig.json
{
"options": {"transform": ["json-as/transform"]}
}
If you'd like to see the code that the transform generates, run with JSON_DEBUG=true
šŖ Usage
import { JSON } from "json-as";
@json
class Vec3 {
x: f32 = 0.0;
y: f32 = 0.0;
z: f32 = 0.0;
}
@json
class Player {
@alias("first name")
firstName!: string;
lastName!: string;
lastActive!: i32[];
@omitif((self: Player) => self.age < 18)
age!: i32;
@omitnull()
pos!: Vec3 | null;
isVerified!: boolean;
}
const player: Player = {
firstName: "Jairus",
lastName: "Tanaka",
lastActive: [2, 13, 2025],
age: 18,
pos: {
x: 3.4,
y: 1.2,
z: 8.3
},
isVerified: true
};
const serialized = JSON.stringify<Player>(player);
const deserialized = JSON.parse<Player>(serialized);
console.log("Serialized " + serialized);
console.log("Deserialized " + JSON.stringify(deserialized));
Examples
ā” Performance
The json-as
library has been optimized to achieve near-gigabyte-per-second JSON processing speeds through SIMD acceleration and highly efficient transformations. Below are some key performance benchmarks to give you an idea of how it performs.
Raw Performance
Simple
Vector3 Object | 32,642,320 ops/s | 9,736,272 ops/s | 1,240 MB/s | 369 MB/s |
Alphabet String | 4,928,856 ops/s | 7,567,360 ops/s | 975 MB/s | 1,498 MB/s |
Small JSON Object | [Fill Value] | [Fill Value] | [Fill Value] | [Fill Value] |
Medium JSON Object | [Fill Value] | [Fill Value] | [Fill Value] | [Fill Value] |
Large JSON Object | [Fill Value] | [Fill Value] | [Fill Value] | [Fill Value] |
SIMD
Vector3 Object | 32,642,320 ops/s | 9,736,272 ops/s | 1,240 MB/s | 369 MB/s |
Alphabet String | 20,368,584 ops/s | 28,467,424 ops/s | 3,910 MB/s | 5,636 MB/s |
Small JSON Object | [Fill Value] | [Fill Value] | [Fill Value] | [Fill Value] |
Medium JSON Object | [Fill Value] | [Fill Value] | [Fill Value] | [Fill Value] |
Large JSON Object | [Fill Value] | [Fill Value] | [Fill Value] | [Fill Value] |
JavaScript
Vector3 Object | 2,548,013 ops/s | 1,942,440 ops/s | 97 MB/s | 73 MB/s |
Alphabet String | 3,221,556 ops/s | 2,716,617 ops/s | 624 MB/s | 537 MB/s |
Small JSON Object | [Fill Value] | [Fill Value] | [Fill Value] | [Fill Value] |
Medium JSON Object | [Fill Value] | [Fill Value] | [Fill Value] | [Fill Value] |
Large JSON Object | [Fill Value] | [Fill Value] | [Fill Value] | [Fill Value] |
Real-World Usage
Web API Response | [Fill Value] | [Fill Value] | [Fill Value] | [Fill Value] |
Database Entry | [Fill Value] | [Fill Value] | [Fill Value] | [Fill Value] |
File Parsing | [Fill Value] | [Fill Value] | [Fill Value] | [Fill Value] |
š License
This project is distributed under an open source license. You can view the full license using the following link: License
š« Contact
Please send all issues to GitHub Issues and to converse, please send me an email at me@jairus.dev
2025-02-25 - 1.0.0-beta.2
- feat: add support for custom serializers and deserializers #110