我需要将 protobuf 消息转换为 java 中的 JSON 字符串。为此,我按照文档的建议使用以下 API(https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/util/JsonFormat.Printer.html)
String jsonString = JsonFormat.printer().includingDefaultValueFields().print(protobufMessage);
Run Code Online (Sandbox Code Playgroud)
这对于简单的字符串来说效果很好,但是,当我的字符串包含特殊字符(如 &、单引号等)时,JsonFormat 中的 gson.toJson() 方法会将特殊字符转换为八进制格式。例如,“A&BC”将转换为“A\u0026BC”。此外,生成的字符串还附加了一个额外的反斜杠。所以最终“A&BC”被转换为字符串“A\\u0026BC”。
如果它是“A\u0026BC”,那么我可以转换为字节数组并用它形成一个字符串。但由于额外的反斜杠我无法这样做。
目前我使用的是 protobuf 版本 3.7.1,我尝试升级并检查是否有最新的 API 可用,但没有帮助。我在网上搜索但没有找到任何参考(JSONFormat.printToString也报告了类似的问题,但此API在更高版本中被删除。https: //github.com/carlomedas/protobuf-java-format/issues/16)。如果您遇到此问题,有人可以在这里提供帮助吗?