如何使用protobuf-java-format

时间:2016-03-13 19:08:09

标签: java json protocol-buffers

如果我有一个包含未知字段的protobuf消息:

leaf1: "Hello"
leaf2: 23
leaf3: 41
4: "world"

其中leaf1,leaf2和leaf3是我的已知字段,4是未知字段。然后我使用protobuf-java-format转换为json,如下所示:

return new JsonFormat().printToString(protobuf);

我得到以下内容:

{"leaf1": "Hello","leaf2": 23,"leaf3": [41], "4": ["world"]}

然而,如果我然后反过来反序列化json:

public static <T extends Message> T convertToProtobuf(String json, T defaultInstance)
    throws ParseException {
    Builder builder = defaultInstance.newBuilderForType();
    JsonFormat format = new JsonFormat();
    format.merge(json, ExtensionRegistry.getEmptyRegistry(), builder);
    return (T)builder.build();
}

然后我的结果如下:

leaf1: "Hello"
leaf2: 23
leaf3: 41

问题是在重构的原型中不存在作为未知区域的区域4。我做错了什么,还是不支持?谢谢!

1 个答案:

答案 0 :(得分:0)

Builder不支持将未知字段设置为提供的JsonFormat - 它只会丢弃它们并继续使用剩余的JSON字符串。

JsonFormat的{​​{1}}的Javadoc:

  

将protobuf消息转换为JSON格式或从JSON格式转换的实用程序类。该   JSON格式遵循Proto3 JSON规范,仅遵循proto3   支持功能。 Proto2仅具有功能(例如,扩展和   未知字段)将在转换中被丢弃。那就是   将proto2消息转换为JSON格式,扩展名和未知   字段将被视为不存在。这适用于   proto2消息也包含在proto3消息中。