在 C 中转换协议缓冲区 to/from JSON,而不生成 C 代码

Converting protocol buffers to/from JSON in C, without generating C code

我需要使用 .desc 文件来启用序列化协议缓冲区消息的读取并将其转换为 JSON(使用 jansson)。

这是因为协议缓冲区消息格式的更改比 C 代码更频繁。 .desc 文件将是可执行文件的运行时输入。

我找到了 https://github.com/Sannis/protobuf2json-c,但我读到它需要生成 C 代码。特别是 ProtobufCMessage 需要为被解码的消息而存在,我看不到在不生成 C 代码的情况下制作 ProtobufCMessage(来自 /usr/include/google/protobuf-c/protobuf-c.h)的方法。

我是不是遗漏了什么,或者我需要编写新代码吗?

我不熟悉 .desc 扩展,但我从上下文中猜测它是一个包含 protobuf FileDescriptorProto 的文件,定义在 google/protobuf/descriptor.proto.

要做你想做的事,你很可能需要使用 Protobuf C++ 或 Java 库,每个库都定义了一个 class DynamicMessage ,它具有模拟的能力基于描述符的任意消息类型。然后,您可以将其与任何基于标准 Protobuf 反射接口的 Protobuf-JSON 库结合使用。 (您也可以非常轻松地编写自己的 JSON 转换器;使用 TextFormat class(在 C++ 和 Java Protobuf 库中找到)作为模板。)

我的理解是 protobuf-c 目前不包含等同于 DynamicMessage