JsonFormat.printer()。print()如何工作?

时间:2018-03-22 16:11:18

标签: java json protocol-buffers

我有一个非常简单的原型:

message ChargeCardResponse
{
    bool success = 1;
}

当我尝试将其解析为String时,我从JsonFormat.printer()得到一个非常奇怪的输出.print()取决于成功值。

ChargeCardResponse.Builder builder = ChargeCardResponse.newBuilder();
System.out.println(JsonFormat.printer().print(builder.setSuccess(true).build()));

输出: {     “成功”:是的 }

ChargeCardResponse.Builder builder2 = ChargeCardResponse.newBuilder();
System.out.println(JsonFormat.printer().print(builder2.setSuccess(false).build()));

输出:{}

因此,如果我使用success属性为打印机赋予false值,则无法生成JSON格式。 我究竟做错了什么?有没有人可以确认一下?

1 个答案:

答案 0 :(得分:2)

问题是将成功设置为“false”等同于保持默认的“false”值不变。

JsonPrinter省略了默认的proto值,除非它关闭了该选项:

https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/util/JsonFormat.Printer#includingDefaultValueFields--

这应该有效,我想:

ChargeCardResponse.Builder builder2 = ChargeCardResponse.newBuilder();
System.out.println(JsonFormat.printer().includingDefaultValueFields().print(builder2.setSuccess(false).build()));