如何在 JavaScript 中使用 google-protobuf 使用“map”对消息进行编码? (协议缓冲区)
How to encode messages with “map” using google-protobuf in JavaScript? (protocol buffers)
我想问一下如何编码(序列化)地图字段。
根据 google 指南,“JavaScript 生成的代码”包含以下用于映射字段的函数。生成解码函数(getFooMap()
)。但是我在任何地方都找不到地图类型的编码函数或指南。 (我以为会有setXXXMap()
这样的函数,但是没找到。)
我应该如何对地图字段进行编码?
https://developers.google.com/protocol-buffers/docs/reference/javascript-generated#map
地图字段
对于带有映射字段的消息:
message Bar {}
message Baz {
map<string, Bar> foo = 1;
}
编译器生成以下实例方法:
getFooMap()
: Returns 包含 foo 的键值对的 Map。然后,您可以使用 Map 方法与地图进行交互。
这是一个例子:
地图-test.proto
syntax = "proto3";
package test;
message Table {
string label = 1;
map<string, int32> data = 2;
}
生成protobuf:
$ protoc --js_out=import_style=commonjs,binary:. ./map-test.proto
地图-test.js
var proto = require('./map-test_pb');
// Serialization
var msg = new proto.Table();
msg.setLabel("Test");
msg.getDataMap().set("a", 1);
msg.getDataMap().set("b", 2);
msg.getDataMap().set("c", 3);
var serialized = msg.serializeBinary();
// Deserialization
var deserialized = proto.Table.deserializeBinary(serialized);
console.log(deserialized.getLabel());
deserialized.getDataMap().forEach(function(v, k) {
console.log(k, v);
});
// console.log(deserialized.getDataMap().entries());
// console.log(deserialized.getDataMap().get("a"));
输出:
Test
a 1
b 2
c 3
您可以使用地图的set()
和get()
方法来存储和检索值; forEach()
遍历所有 KV 对等。检查 these map tests 以获取更多示例。
我想问一下如何编码(序列化)地图字段。
根据 google 指南,“JavaScript 生成的代码”包含以下用于映射字段的函数。生成解码函数(getFooMap()
)。但是我在任何地方都找不到地图类型的编码函数或指南。 (我以为会有setXXXMap()
这样的函数,但是没找到。)
我应该如何对地图字段进行编码?
https://developers.google.com/protocol-buffers/docs/reference/javascript-generated#map
地图字段
对于带有映射字段的消息:
message Bar {}
message Baz {
map<string, Bar> foo = 1;
}
编译器生成以下实例方法:
getFooMap()
: Returns 包含 foo 的键值对的 Map。然后,您可以使用 Map 方法与地图进行交互。
这是一个例子:
地图-test.proto
syntax = "proto3";
package test;
message Table {
string label = 1;
map<string, int32> data = 2;
}
生成protobuf:
$ protoc --js_out=import_style=commonjs,binary:. ./map-test.proto
地图-test.js
var proto = require('./map-test_pb');
// Serialization
var msg = new proto.Table();
msg.setLabel("Test");
msg.getDataMap().set("a", 1);
msg.getDataMap().set("b", 2);
msg.getDataMap().set("c", 3);
var serialized = msg.serializeBinary();
// Deserialization
var deserialized = proto.Table.deserializeBinary(serialized);
console.log(deserialized.getLabel());
deserialized.getDataMap().forEach(function(v, k) {
console.log(k, v);
});
// console.log(deserialized.getDataMap().entries());
// console.log(deserialized.getDataMap().get("a"));
输出:
Test
a 1
b 2
c 3
您可以使用地图的set()
和get()
方法来存储和检索值; forEach()
遍历所有 KV 对等。检查 these map tests 以获取更多示例。