原始文件如下所示:
syntax = "proto3";
package example;
message person {
int32 id = 1;
string name = 2;
}
message all_person {
repeated person Per = 1;
}
当我设置id = 0时,name ='hello',我希望显示“ id”:0, 但在SerializeToString和parseToString之后,它将返回
{
"Per": [
{
"name": "hello"
}
]
}
但是如果我设置id = 1,name ='hello',它将返回
{
"Per": [
{
"id": 1,
"name": "hello"
}
]
}
答案 0 :(得分:0)
0是数字的默认值(类似地,字符串默认为空,布尔值为false)。有关更多详细信息,请参见here。
为了提高效率,Protobuf依靠这些默认值。在我们的系统中(使用FastRTPS和Protobuf进行发布/订阅),默认值不会通过网络传输。根据您所看到的,它也不必担心它们进行序列化。
但是,这只是默认行为,并且可以更改。例如,如果您使用的是MessageToJson
,则可以简单地将一个可选参数including_default_value_fields
设置为True
,说明您也希望使用默认输出:
jsonStr = MessageToJson(myMsg, True)