Получить вложенный список (матрицу) из gRPC в NodeJS

Я использую gRPC с NodeJs, и мне нужен ответ (пример в формате JS):

[
  ['aa1', 0, 0],
  ['aa2', 0, 0],
  ...
  ['aaN', 0, 0],
]

Список внутри другого списка. Как двумерный массив или матрица.

Проблема здесь в том, что я не видел примеров, возвращающих список внутри объекта без полей ключ/значение, поэтому я не знаю, как создать файл .proto.

Теперь у меня есть что-то вроде этого:

message Response{
  repeated ResponseData data = 1;
}
message ResponseData {
  repeated string field1 = 1;
  repeated uint32 field2 = 2;
  repeated uint32 field3 = 3;
}

И в файл узла, чтобы получить и прочитать данные, у меня есть что-то вроде:

client.getData(request, {}, (err, response)=> {
  var result = response.getDataList();
  // ^^^^^^^ here I want to get the matrix
}

Также я пробовал с:

var result = response.getDataList();
result.forEach(element => {
  console.log("element 1 = ",element.getField1List())
  console.log("element 2 = ",element.getField2List())
  console.log("element 3 = ",element.getField3List())
})

Но массивы, возвращенные из element.getFieldXList(), пусты.

Также с сервера я отправляю эту тестовую матрицу:

[["0",0,0],["1",1,1],["2",2,2],["3",3,3]]

Приветствуется любая помощь.
Заранее спасибо.

Редактировать:
Используя console.log(JSON.stringify(result)) вывод:

[{"wrappers_":null,"arrayIndexOffset_":-1,"array":[[],[],[]],"pivot_":1.7976931348623157e+308,"convertedPrimitiveFields_":{}},{"wrappers_":null,"arrayIndexOffset_":-1,"array":[[],[],[]],"pivot_":1.7976931348623157e+308,"convertedPrimitiveFields_":{}},{"wrappers_":null,"arrayIndexOffset_":-1,"array":[[],[],[]],"pivot_":1.7976931348623157e+308,"convertedPrimitiveFields_":{}},{"wrappers_":null,"arrayIndexOffset_":-1,"array":[[],[],[]],"pivot_":1.7976931348623157e+308,"convertedPrimitiveFields_":{}}]

person J.F.    schedule 29.12.2020    source источник
comment
Можете ли вы console.log(JSON.stringify(result)) внутри обратного вызова getData показать нам результат?   -  person eol    schedule 29.12.2020
comment
Да! Обновленный вопрос с результатом console.log().   -  person J.F.    schedule 29.12.2020
comment
О, хорошо, так что это определенно проблема на стороне сервера grpc, поскольку элементы в каждом array пусты. Я думал, у вас возникли проблемы с отображением его в вашем коде nodejs. Поскольку у меня нет опыта работы с grpc, я не могу здесь помочь, извините :)   -  person eol    schedule 29.12.2020
comment
Ок, спасибо за совет в любом случае. Я посмотрю на сервер, но теперь он отправляет этот объект: [["0",0,0],["1",1,1],["2",2,2],["3",3,3]], так что все должно быть в порядке, так что, возможно, проблема в структуре proto и попытке отобразить этот список...   -  person J.F.    schedule 29.12.2020


Ответы (1)


Определение сообщения protobuf в вопросе описывает объект, который содержит список объектов, каждый из которых имеет три поля, каждое из которых имеет список примитивных значений. Однако вы сказали, что пытались отправить список списков, который имеет совсем другую структуру. Чтобы отправить сообщение, вам нужно предоставить объект с такой же структурой. Для предоставленных типов сообщений это будет выглядеть примерно так:

response = {
  data = [
    {
      field1: ["0"],
      field2: [0],
      field3: [0]
    },
    {
      field1: ["1"],
      field2: [1],
      field3: [1]
    },
    // ...
  ]
}

Если вы хотите представить что-то более похожее на список списков в вопросе, вы, вероятно, захотите, чтобы внутренние поля сообщения ResponseData не были repeated.

person murgatroid99    schedule 06.01.2021
comment
Большое спасибо за ответ, посмотрю. Но я хочу список списка. Это решение для списка объектов? Я ищу матризное решение, как первый пример. - person J.F.; 07.01.2021
comment
Вы не можете напрямую представлять список списков в Protobuf. Вам нужно перевести его в какой-то формат сообщения, как в вопросе. - person murgatroid99; 07.01.2021
comment
Я этого не знал. Тогда я проверю ваше решение завтра. Большое спасибо! - person J.F.; 07.01.2021