我想了解,ProtoBuf.js
是如何工作的?如何使用Protobuf.js解碼用於proto文件的Json格式?
的Protobuf - https://github.com/dcodeIO/ProtoBuf.js
我的原型文件gameSetting.proto
樣子:
message GameSettings {
required string gameName = 1;
repeated Category categories = 2;
}
message Category {
required int32 categoryId = 1;
required string categoryAbbreviation = 2;
required string categoryName = 3;
required string numberInSquad = 4;
required string numberInTeam = 5;
required string captain = 6;
}
在這裏,我實現數據的解碼和編碼的JavaScript代碼:
var ProtoBuf = dcodeIO.ProtoBuf;
var protoURL = '../_doc/protobuf/gameSettings.proto';
var dataURL = '../xmlapi?type=game-settings&competitionid=1&outputtype=text';
var builder = ProtoBuf.loadProtoFile(protoURL, function(err, builder) {
// WE CAN ALSO TRY USING JSON FORMAT FOR THE PROTO FILES:
// https://github.com/dcodeIO/ProtoBuf.js/wiki/Builder#using-json-without-the-proto-parser
// encoding test
var GS_build = builder.build('GameSettings');
var GS = new GS_build({
"gameName": "games Test 2015",
"categories": [{
"categoryId": 1,
"categoryAbbreviation": "GK",
"categoryName": "Goalkeeper",
"numberInSquad": "2-2",
"numberInTeam": "1-1",
"captain": "0-1"
}]
});
// encode various types to test
var GS_buffer = GS.encode();
var GS_base64 = GS.encode64(); // this looks like something to use with AJAX
var GS_arrayBuffer = GS_buffer.toArrayBuffer();
// decoding test
var GS_buffer_decoded = GS_build.decode(GS_buffer);
var GS_buffer_decoded_raw = GS_buffer_decoded.toRaw();
var GS_base64_decoded = GS_build.decode64(GS_base64);
var GS_base64_decoded_raw = GS_base64_decoded.toRaw();
var GS_arrayBuffer_decoded = GS_build.decode(GS_arrayBuffer);
var GS_arrayBuffer_decoded_raw = GS_arrayBuffer_decoded.toRaw();
// decoding AJAX test
$.get(dataURL, function(data){
var GS = GS_build.decode(data);
});
});
代碼
// encoding test
和// decoding test
- 工作正常。
但在代碼中的一些問題:
var GS = GS_build.decode(data)
我怎樣才能解決這個問題?這裏
它看起來並不像6.8.0存在此函數簽名。是否有替代方案或計劃添加該功能? –