Доступ к данным внутри вложенного поля proto - PullRequest
0 голосов
/ 20 июня 2020

Во-первых, извините, если заголовок сформулирован плохо. Я не совсем уверен, что я здесь делаю, так как работаю с protobuf впервые.

У меня есть следующий результат декодирования файла .bin с помощью proto c

1: 1540
2: "test"
3: 186
4: 10041
5: "test2"
11: 1
12: 1
13: 1
14: 1
15: 1
16: 1
17: 1
18: 1
19: 1
101 {
  1 {
    1: 1540
    2: 379
    3: 60
    4: 0
    5: 1553862415000
  }
}

Я создаю прото-файл со следующим сообщением

syntax = "proto2";

message Profile {
  required int32 id = 1;
  required string name = 2;
  required int32 rank = 3;
  required string description = 5;
  required string test = 101;
}

Как мне настроить сообщение, чтобы я мог получить доступ к данным внутри 101, так как внутри него есть вложенные поля?

1 Ответ

0 голосов
/ 25 июня 2020

Глядя на декодированное сообщение, похоже, что оно действительно было сгенерировано из чего-то вроде

message Profile {
  (...)
  required Level2 test = 101;
}

message Level2 {
  optional Level3 nested = 1;
}

message Level3 {
  optional int32 field1 = 1;
  optional int32 field2 = 2;
  optional int32 field3 = 3;
  optional int32 field4 = 4;
  optional int32 field5 = 5;
}

Конечно, трудно сказать, правильный ли тип int32 или какое-либо из этих полей должно быть повторено.

Вы можете изменить определение сообщения на что-то вроде приведенного выше, если вы хотите получить доступ к этим полям.

Если вы не хотите анализировать поле (т.е. вернуть его просто его сериализованное представление, вы можете просто ввести его как bytes:

message Profile {
  (...)
  required bytes test = 101;
}
...