问题标签 [protobuf-3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1945 浏览

go - 如何在 protobuf3 中存储 time.duration

在原始文件中...

... 将自动生成 *duration.Duration

如何更改 proto 文件以获取 time.Duration

0 投票
1 回答
65 浏览

protobuf-java - Protobuf3:当对象的所有字段都设置为默认值时会发生什么

我对 proto3 的理解是,对于标量,无法区分消息发送者是否将字段设置为默认值,或者根本没有设置该字段,因为默认值不是通过网络发送的。也就是说,无论是否设置了默认值,对该字段的 hasField 调用都将返回 false。只有当字段设置为默认值以外的其他值时,hasField 才会返回 true。

我已经阅读了一些关于使用对象作为包装器来解决这种情况的内容,但我仍在尝试了解它是如何工作的,例如:https ://github.com/protocolbuffers/protobuf/blob/master/src/google/ protobuf/wrappers.proto

我的问题是:如果一个对象的所有字段都设置为默认值,该对象是否仍会通过网络发送?或者该对象的 hasFields 是否会返回 False?

0 投票
1 回答
51 浏览

java - 使用多种类型的数据包实现 Protobuf3 的最佳方法是什么?

所以我是 protobuf3 的新手,想知道将我的旧数据包系统实现到 protobuf3 以进行颤振/网络通信的最佳方法是什么。有什么方法可以让我接收/发送多个数据包,而无需在 netty 中为每个数据包注册一个解码器?如果是这样,怎么做?

0 投票
1 回答
955 浏览

protocol-buffers - 扩展不同数量的字段时如何用 proto3 替换 proto2 扩展?

我正在尝试学习 proto3,并对any.

我经常使用扩展,如果我的原型是这样的:

那么如何用 any 替换这些扩展?我应该像这样写吗

?

可能有这么多原型扩展了 base.proto,我无法确定这些原型的最大扩展数。那么我怎样才能用任何替换这些扩展?

如果我在消息库中必须写1到100之间的任何一个……哦,那太可怕了!</p>

0 投票
1 回答
1098 浏览

c++11 - 在 protobuf 类中没有访问或设置值的有效方法

我最近一直在与 Google protobufs 作斗争。我写了一个名为Button.proto.

以下是它的内容:

我使用此命令成功编译了它(将 $USER 替换为实际计算机用户):

我正在使用 protobuf 版本3.7.1。我的 *.cpp 文件被调用dumbprrotos.cpp,但由于某种原因它没有编译。这是我的 *.cpp 文件:

我标记的 2 段代码是我试图完成的同一件事的 2 个版本,但两者都抛出相同类型的错误,我不知道如何解释它。我需要做什么才能编译此代码?

我还应该提到我3.7.1在我的主目录中安装了 protobuf(这意味着 protobuf 的 zip 文件被解压到那里然后安装在那里)。

我当前运行代码时得到的错误,确切的方式是,我得到这个错误:

当我用另一个破碎的场景编译代码时,

我收到了这个错误:

这是我用来编译代码的脚本:

我想这就是我需要向你们展示的一切。我错过了什么吗?我需要做什么才能编译我的 *.cpp 代码?

我在 Ubuntu 16.04 上。

0 投票
4 回答
5805 浏览

python-3.x - Protobuf 和 Python:如何将消息添加到“可重复任何”字段?

我有一个原型消息:

我应该如何将目标消息添加到Task.targets

在官方文档中,我找到了有关如何将值分配给单个Any类型值的信息,但是在我的情况下,我有repeated Any字段类型。

编辑Task.targets可能包含不同类型的目标,这Any就是使用 type 的原因。单个Target消息仅用于最小的可重现示例。

0 投票
1 回答
3437 浏览

python - 如何在 Protobuf 中序列化嵌套消息中的默认值

正如标题所述,我有一条 protobuf 消息,其中包含另一条消息,如下所示:

example.json是空的(这意味着到处都是默认值):

在我的 python 脚本中,我阅读了这条消息:

当我检查example_message.subMessage.number它的值0是正确的。

现在我想将它转换为所有值都存在的字典 - 甚至是默认值。对于转换,我使用方法google.protobuf.json_format.MessageToDict()。但是您可能知道MessageToDict(),如果没有我告诉它,它不会序列化默认值(就像在这个问题中一样:Protobuf doesn't serialize default values)。所以我将参数添加including_default_value_fields=True到调用中MessageToDict()

返回:

而不是我所期望的:

protobuf 代码中的注释(可在此处找到:https ://github.com/protocolbuffers/protobuf/blob/master/python/google/protobuf/json_format.py )证实了这种行为:

include_default_value_fields:如果为 True,则将始终序列化奇异原始字段、重复字段和映射字段。如果为 False,则仅序列化非空字段。单个消息字段和 oneof 字段不受此选项影响。

那么,即使它们是嵌套消息中的默认值,我该怎么做才能获得包含所有值的 dict?


有趣的是,当我example.json看起来像这样时:

我得到了预期的输出。但我不能确保example.json将所有值都写出来,所以这不是一个选项。

0 投票
1 回答
72 浏览

java - 需要一些关于如何解码从 HERE-OLP 以二进制格式下载的 protobuf 文件的建议

我们有一个从 HERE-OLP 下载地图的用例。这些文件采用 Protobuf3(编码为二进制)格式。我们如何解码文件并读取其中的内容?感谢之前做过的任何建议或 Java 源代码。

0 投票
0 回答
391 浏览

python-3.x - 为什么我不能使用 protoc 通过 --python3_out 生成具有 Any 类型字段的 Python3 对象,只有 --python_out 有效

我创建了一个原型文件 RpcCmd.proto,并定义了一个类型为 的字段google.protobuf.Any,当我尝试使用 cmd 生成 Python3 目标文件时,protoc --python3_out=./gen RpcCmd.proto它失败并出现错误

但是,如果我用 cmd 输入protoc --python_out=. RpcCmd.proto它就成功了

我也尝试--java_out过没有任何错误的工作。

是否可以使用 type Anywith --python3_out

0 投票
1 回答
1651 浏览

c# - 在 C#/.NET 中使用 protobuf3 发送通用数据类型的正确方法

我正在使用插件架构开发应用程序,并且我想在客户端和服务器之间发送对象而不知道被发送对象的类型。

有没有办法发送通用数据类型?

根据 Microsoft 页面,该Any字段可能是此问题的答案,而不是使用字符串和自定义序列化/反序列化实现来发送这些对象。但是,我没有发现提供的c#示例可以理解。我试图以这种方式解决问题:

但似乎我需要IMessage在我的类中实现接口,我不知道该怎么做。

如果有人可以提供一个基本示例来帮助我理解如何做到这一点,那就太好了。

谢谢 !