Javascript js将proto文件转换为JSON描述符,重复会丢失
我正在使用构建一个节点包,其中包含我们的协议,并为该包中定义的Proto消息提供编码和解码功能。我可以使用.proto文件(在运行时加载.proto文件),但由于模块需要在客户端可用,并且我无法将.proto文件打包到解析的.js文件(使用browserify构建)中,因此我需要使用一种方法,在build.js中启用打包 输入JSON描述符Javascript js将proto文件转换为JSON描述符,重复会丢失,javascript,json,protocol-buffers,protobuf.js,Javascript,Json,Protocol Buffers,Protobuf.js,我正在使用构建一个节点包,其中包含我们的协议,并为该包中定义的Proto消息提供编码和解码功能。我可以使用.proto文件(在运行时加载.proto文件),但由于模块需要在客户端可用,并且我无法将.proto文件打包到解析的.js文件(使用browserify构建)中,因此我需要使用一种方法,在build.js中启用打包 输入JSON描述符 var jsonDescriptor = require("./awesome.json"); // exemplary for node var roo
var jsonDescriptor = require("./awesome.json"); // exemplary for node
var root = protobuf.Root.fromJSON(jsonDescriptor);
json文件可以打包(需求由browserify解决)。在.json中也可以使用原型定义
我将.proto文件转换为.json文件,并使用示例数据进行了尝试不幸的是,它在重复字段时失败。
.proto文件看起来像这样:
message Structure {
map <int32, InnerArray> blocks = 1;
}
message Inner{
int32 a = 1;
int32 b = 2;
bool c = 3;
}
message InnerArray{
repeated Inner inners = 1;
}
如果我没有弄错的话,这里有一个字段的属性
当我对示例数据进行编码和解码时,它会在repeated字段处停止:(注意,映射工作正常)
我还检查了我的根,以了解加载的类型的外观,它与我的定义完全相同,只是缺少重复的:
"InnerArray" : {
"fields": {
"inners" : {
"type" : "Inner",
"id" : 1
}
}
},
如何在JSON描述符中正确定义重复字段?
如果有一种方法可以预先包含proto文件,而不在运行时加载它们,这样我就可以用browserify将它们包装起来,我也会接受这一解决方案。浏览代码后,我发现您无法在JSON描述符中设置required。 正确的方法是设置
“规则”:“重复”
;
因为字段设置了
{
"blocks": {
"0": {
"inners": {}
},
...
"InnerArray" : {
"fields": {
"inners" : {
"type" : "Inner",
"id" : 1
}
}
},