Java: JSON -> Protobuf & back conversion

我有一个现有的系统,它在GUI和服务器之间使用基于protobuf的通信协议。现在我想添加一些持久性,但目前protobuf消息直接转换为第三方自定义对象。

有没有办法将原型消息转换为json,然后将其持久化到数据库中。

注意:我不太喜欢将二进制protobuf编写到数据库的想法,因为它有一天会变得与较新版本不向后兼容,并以这种方式破坏系统。


答案 1

正如在回答类似问题中提到的,自v3.1.0以来,这是PropertBuffers支持的一项功能。对于Java,包括扩展模块com.google.protobuf:protobuf-java-util,并使用JsonFormat,如下所示:

JsonFormat.parser().ignoringUnknownFields().merge(json, yourObjectBuilder);
YourObject value = yourObjectBuilder.build();

答案 2

我们目前正在使用protobuf-java-format将Protobuf消息(的任何子类)转换为JSON格式,以通过我们的Web API发送。Message

只需执行以下操作:

  JsonFormat.printToString(protoMessage)