babu
JSでPHPのserialize、unserializeみたいにインスタンスの情報覚えといてほしいなーって時ありますよね
目次
そんなときはtypeson
https://github.com/dfahlander/typeson
https://www.npmjs.com/package/typeson
こんな感じ
const Typeson = require('typeson');
// こんなクラスを保存したい
class Ningen {
constructor(name, hp, birthday) {
this.name = name
this.hp = hp
this.birthday = birthday
}
hpLog() {
console.log(`${this.name}のHPは${this.hp}です 誕生日は${this.birthday.toLocaleDateString()}です`)
}
}
// 型情報を登録しておく
const typeson = new Typeson().register({
Ningen,
// ビルトインクラスはプリセットが用意されてあるはずなのでわざわざ以下のように書く必要はないと思う
Date: [
(x) => x instanceof Date, // テスト用
(d) => d.getTime(), // 保存するときの値変換用
(n) => new Date(n), // 復元するときの変換用
],
});
// 人間リストw
const a = [
new Ningen("a", 25, new Date("1920 12-01")),
new Ningen("b", 78, new Date("1975 03-01")),
new Ningen("c", 5000, new Date("1992 05-01")),
];
const tson = typeson.stringify(a);
// このように型情報が含まれたjsonになっている
// {"$":[{"name":"a","hp":25,"birthday":-1549011600000},{"name":"b","hp":78,"birthday":162831600000},{"name":"c","hp":5000,"birthday":704646000000}],"$types":{"$":{"0":"Ningen","1":"Ningen","2":"Ningen","0.birthday":"Date","1.birthday":"Date","2.birthday":"Date"}}}
// ふっかつのじゅもん!
const revived = typeson.parse(tson);
//[
// Ningen { name: 'a', hp: 25, birthday: 1920-11-30T15:00:00.000Z },
// Ningen { name: 'b', hp: 78, birthday: 1975-02-28T15:00:00.000Z },
// Ningen { name: 'c', hp: 5000, birthday: 1992-04-30T15:00:00.000Z }
//]
revived.forEach(ningen => {
ningen.hpLog();
});
// output
// aのHPは25です 誕生日は1920/12/1です
// bのHPは78です 誕生日は1975/3/1です
// cのHPは5000です 誕生日は1992/5/1で
おわり
babu
他にいいライブラリあったら教えてね〜〜