由于 null 支持很奇怪,protobuf 是否正确支持 json?

Does protobuf support json properly for nulls since null support is odd?

我正在阅读 protobuf 上的 post 就像我阅读 grpc json 以替换现有客户以在 grpc 上使用我们的 json ... https://github.com/protocolbuffers/protobuf/issues/1451

builder.setName(null) 不受支持,因为有线格式确实 'not' 发送 null 值。如果是这种情况,我该如何处理 json 这些情况的等价物

对我来说,'not' 在 protobuf 中调用 setName 会 == {name not exist} 二进制格式,而是 name=0 二进制格式。在这种情况下如何在 protobuf 中指定,以便在切换到 protobuf 时我可以与 json 中的现有客户保持兼容?

对于 Java 具体而言,我们需要一个 setAge() 方法,如果我不调用它,该字段将不存在。如果我调用 setAge(null),它会编组 "age":null。如果我调用 setAge(0),它将编组 "age":0(默认值)。如果我调用 setAge(56) 非默认值,它会编组 "age" : 56

然后我们想要与 protobuf 相同的东西。当然,有线格式可能必须添加其他字段。这很好,因为默认值不会编组到线路上,所以无法区分空值和默认值:(。我们可以为开发人员提供 KISS 线路上的额外数据。

是否有一个原型模式我们也可以用于此以及具有简单的 setAge(null) 方法编组到 "name":null。

这是我现在正在尝试为上述内容做的事情

message SomeMessage {
  string clientId = 1;
  oneof optional_result { // "optional_" prefix here just serves as an indicator, not keyword in proto2
      bool isAccepted = 5;
  }
 }

然后,我看到一个方法 getIsAccepted() returns 'boolean'。我没有看到 hasIsAccepted() 的字段。我不确定如何定义架构以映射到此 'one single' json 字段。

大声笑,因为我刚刚将 grpc json 添加到我们的平台,不确定 protobuf 是否可以支持所有 json 用例....

https://github.com/deanhiller/webpieces/tree/master/webserver-plugins/plugin-grpc-json

业务案例:一些客户问我们如果保险被接受则为 true,如果不接受则为 false,如果保险不存在则为 null。我们这里有三重用例。

谢谢, 院长

对于下一个人(我使用我在 SO 上的帖子和答案作为我自己的个人知识库),我发现了这篇很棒的文章...

https://itnext.io/protobuf-and-null-support-1908a15311b6