protobuf.JS переводит файл proto в дескриптор JSON, повторяется теряется
я использую Protobuf.js построить пакет узла, содержащий наш протокол и предлагающий функции кодирования и декодирования для сообщений Proto, определенных в этом пакете. Я был бы в порядке с использованием .файлы proto (загрузка .proto файлы происходят во время выполнения), но так как модуль должен использоваться на стороне клиента, и я не могу упаковать .файлы proto для моего разрешения .js-файл (построенный с browserify), мне нужно использовать способ, который позволяет упаковку в сборке.js.
введите дескрипторы JSON.
var jsonDescriptor = require("./awesome.json"); // exemplary for node
var root = protobuf.Root.fromJSON(jsonDescriptor);
файл json может быть упакован (требование разрешено browserify). Определения типа Proto также возможны внутри .в JSON
я перевел мой .прото файл в a .JSON-файл и попробовал его с моим примером данных. к сожалению, это не удалось с повторяющимися полями.
The .файл 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;
}
который я перевел в этот JSON Дескриптор
{
"nested": {
"Structure": {
"fields": {
"blocks": {
"type": "InnerArray",
"id": 1,
"map" : true,
"keyType" : "int32"
}
}
},
"InnerArray" : {
"fields": {
"inners" : {
"repeated" : true,
"type" : "Inner",
"id" : 1
}
}
},
"Inner" : {
"fields" : {
"a" : {
"type" : "int32",
"id" : 1
},
"b" : {
"type" : "int32",
"id" : 2
},
"c" : {
"type" : "bool",
"id" : 3
}
}
}
}
}
если я не ошибаюсь есть требуются атрибут для поля.
когда я кодирую и декодирую свои данные примера, он останавливается на повторном поле: (обратите внимание, что карта работает нормально).
{
"blocks": {
"0": {
"inners": {}
},
...
Я также изучил свой корень, чтобы узнать, как выглядит загруженный тип, и он выглядит точно так же, как мое определение за исключением, что повторное отсутствует:
"InnerArray" : {
"fields": {
"inners" : {
"type" : "Inner",
"id" : 1
}
}
},
как определить повторяющееся поле правильно в дескрипторе JSON?
если есть способ предварительно включить файлы proto и не загружать их во время выполнения, чтобы я мог обернуть их browserify, я бы принял это как решение.
1 ответов
после просмотра кода я обнаружил, что вы не можете установить требуемый в дескрипторе JSON.
Правильный способ-установить
"rule": "repeated"
;
так как поле установлено с Поле Дескриптор