在 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
。
我需要使用 .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
。