OSONはoson structured object notationの略で、JSONにある多くの問題を解決したものだそうです。
以下にOSONの機能を紹介します。
循環参照
OSONはJSONと異なり、循環参照を扱うことができます。
const obj = {};
obj.self = obj;
JSON.stringify(obj); // error
oson.stringify(obj); // works!
参照の繰り返し
また、OSONはJSONと異なり、繰り返された参照を扱うこともできます。
const obj = {};
const arr = [obj, obj];
const [left, right] = JSON.parse(JSON.stringify(arr));
assertStrictEquals(left, right); // error
const [l, r] = oson.parse(oson.stringify(arr));
assertStrictEquals(l, r); // works!
undefined
OSONはundefinedもうまく扱えます。
const undef = oson.parse(oson.stringify(undefined));
assertStrictEquals(undef, undefined);
スパースな配列
スパースな配列もOSONでエンコードできます。
const arr = [5, , , , 6, , , 7];
console.log(oson.parse(oson.stringify(arr)));
// [ 5, <3 empty items>, 6, <2 empty items>, 7 ]
bigint
bigint型にも対応しています。
const num = 10n ** 1000n;
JSON.stringify(num); // error
oson.stringify(num); // works!
他の型への対応
他にも以下の組み込み型に対応しています。
- Map
- Set
- Date
- RegExp
- Error
- Uint8Array
- URL
出展: