У меня была похожая проблема, и так как я не мог найти достаточного решения, я также создал библиотеку сериализации для javascript: https://github.com/wavesoft/jbb (на самом деле это немного больше, поскольку она в основном предназначена дляресурсы комплектации)
Он близок к Binary-JSON, но добавляет несколько дополнительных функций, таких как метаданные для кодируемых объектов и некоторые дополнительные оптимизации, такие как дедупликация данных, перекрестные ссылки на другие пакеты исжатие на уровне структуры.
Однако здесь есть одна загвоздка: для того, чтобы сохранить небольшой размер пакета, в нем нет информации о типе.Такая информация предоставляется в отдельном «профиле», который описывает ваши объекты для кодирования и декодирования.По причинам оптимизации эта информация предоставляется в форме сценария.
Но вы можете упростить свою жизнь, используя утилиту gulp-jbb-profile
(https://github.com/wavesoft/gulp-jbb-profile)) для генерации сценариев кодирования / декодирования из простого объекта YAMLследующие технические характеристики:
# The 'Person' object has the 'age' and 'isOld'
# properties
Person:
properties:
- age
- isOld
Например, вы можете посмотреть профиль jbb-profile-three
. Когда ваш профиль готов, вы можете использовать JBB следующим образом:
var JBBEncoder = require('jbb/encode');
var MyEncodeProfile = require('profile/profile-encode');
// Create a new bundle
var bundle = new JBBEncoder( 'path/to/bundle.jbb' );
// Add one or more profile(s) in order for JBB
// to understand your custom objects
bundle.addProfile(MyEncodeProfile);
// Encode your object(s) - They can be any valid
// javascript object, or objects described in
// the profiles you added previously.
var p1 = new Person(77);
bundle.encode( p1, 'person' );
var people = [
new Person(45),
new Person(77),
...
];
bundle.encode( people, 'people' );
// Close the bundle when you are done
bundle.close();
И вы можете прочитать это обратно так:
var JBBDecoder = require('jbb/decode');
var MyDecodeProfile = require('profile/profile-decode');
// Instantiate a new binary decoder
var binaryLoader = new JBBDecoder( 'path/to/bundle' );
// Add your decoding profile
binaryLoader.addProfile( MyDecodeProfile );
// Add one or more bundles to load
binaryLoader.add( 'bundle.jbb' );
// Load and callback when ready
binaryLoader.load(function( error, database ) {
// Your objects are in the database
// and ready to use!
var people = database['people'];
});