Search code examples
protocol-buffersproto3

Protobuf ignoring bool and ints values due to default


I am converting a json file to string and then the string is converted to proto3 file.

Here is the json file:

{    "a": false,
     "b": 0
}

Here is how I convert my json file to string:

String json =Files.lines(Paths.get(filePath)).collect(Collectors.joining());

Here is how I convert my string to proto3 file:

    JsonFormat.parser().ignoringUnknownFields().merge(json,messageBuilder);
   MyProto proto = messageBuilder.build();

I have boolean and int fields in my json , the values of some of them are required to be default values (false for boolean and 0 for int).

When I deserialise the above file to proto3 java file then both the above fields are ignored , and my json becomes empty even though I have explicitly set the values(as you can see it in the above json file).

I know that proto3 ignores the default values while deserializing/serializing , however is there any way not to ignore fields which are explicitly set even though they are the default values?


Solution

  • Used proto2 instead of proto3 . Proto2 has this behaviour - if a field is explicitly set , even though it is default value of the field , it is serialized and deserialized .