我需要使用 .desc
文件来读取序列化的 Protocol Buffer 消息并将它们转换为 JSON(使用 jansson)。
这是因为 Protocol Buffer 消息格式的更改比 C 代码更频繁。 .desc
文件将是可执行文件的运行时输入。
我找到了 https://github.com/Sannis/protobuf2json-c但我对此的解读是它需要生成 C 代码。特别是 ProtobufCMessage
需要存在才能解码消息,我看不到制作 ProtobufCMessage 的方法(来自 /usr/include/google/protobuf-c/protobuf-c.h
) 而不生成 C 代码。
我是否遗漏了什么,或者我需要编写新代码吗?
最佳答案
我不熟悉 .desc
扩展名,但我从上下文中猜测它是一个包含 protobuf FileDescriptorProto
的文件,在 中定义google/protobuf/descriptor.proto
.
要执行您想要的操作,您很可能需要使用 Protobuf C++ 或 Java 库,每个库都定义了一个类 DynamicMessage
,它能够根据描述符模拟任意消息类型。然后,您可以将其与任何基于标准 Protobuf 反射接口(interface)的 Protobuf-JSON 库结合使用。 (您也可以非常轻松地编写自己的 JSON 转换器;使用 TextFormat
类(在 C++ 和 Java Protobuf 库中都可以找到)作为模板。)
我的理解是 protobuf-c 目前不包含与 DynamicMessage
等价的东西。
关于在 C 中将 Protocol Buffer 与 JSON 相互转换,而不生成 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28433976/