遍历所有字段并获取protobuf消息中的值

5
我有一个动态的protobuf消息,但我不知道这个消息包含了哪些字段。
我的目标是将所有字段的值合并到一个字符串中,例如,如果消息包含2个字段:string name = "Jack";int age = 12;,那么我想得到的最终结果是"name:Jack, age:12"
我的想法是:因为我不知道这个消息包含了哪些字段,所以我需要遍历这个消息来获取所有字段的名称、类型(可以通过Descriptor访问),然后获取每个字段的值。这是最令人烦恼的部分,因为我需要写很长的代码来处理各种类型的字段。
switch (type) {
case TYPE_UINT32:
    //call get_uint32
    break;
case TYPE_UINT64:
    //call get_uint64
    break;
......
}

我想知道是否有其他更好的方法来完成这个任务?


这似乎是你想要导出JSON格式,参见:https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.util.json_util - alpublic
2个回答

1
Message* message = &your_proto;
const google::protobuf::Descriptor* desc = message->GetDescriptor();
const google::protobuf::Reflection* ref = message->GetReflection();
for (int i = 0; i < desc->field_count(); ++i) {
  const google::protobuf::FieldDescriptor* field_desc = desc->field(i); 
  switch (field_desc->cpp_type()) {
    case google::protobuf::FieldDescriptor::CPPTYPE_INT32:
      // call get_int32
      break;
    case google::protobuf::FieldDescriptor::CPPTYPE_INT64:
      // call get_int64
      break;
    ...
  }
}

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接