Protobuf 由于默认而忽略 bool 和 ints 值

Man*_*ena 5 protocol-buffers proto3

我正在将 json 文件转换为字符串,然后将字符串转换为 proto3 文件。

这是 json 文件:

{    "a": false,
     "b": 0
}
Run Code Online (Sandbox Code Playgroud)

以下是我将 json 文件转换为字符串的方法:

String json =Files.lines(Paths.get(filePath)).collect(Collectors.joining());
Run Code Online (Sandbox Code Playgroud)

以下是将字符串转换为 proto3 文件的方法:

    JsonFormat.parser().ignoringUnknownFields().merge(json,messageBuilder);
   MyProto proto = messageBuilder.build();
Run Code Online (Sandbox Code Playgroud)

我的 json 中有 boolean 和 int 字段,其中一些值需要为默认值(boolean 为 false,int 为 0)。

当我将上面的文件反序列化为 proto3 java 文件时,上面的两个字段都被忽略,并且我的 json 变成空,即使我已经显式设置了值(如您在上面的 json 文件中看到的那样)。

我知道 proto3 在反序列化/序列化时忽略默认值,但是有没有办法不忽略显式设置的字段,即使它们是默认值?

Man*_*ena 3

使用 proto2 而不是 proto3 。Proto2 具有这种行为 - 如果显式设置字段,即使它是该字段的默认值,它也会被序列化和反序列化。