在 C 中将 Protocol Buffer 与 JSON 相互转换,而不生成 C 代码

标签 c json protocol-buffers protobuf-c

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

相关文章:

javascript - For Loop on array from dynamic API in JSON format within template literals

java - 在Java中仅在第一次出现时使用特殊符号分割字符串?

为c中nanopb中的protobuf消息中的重复字段创建回调和结构

compiler-errors - libprotoc 编译 protoc 文件,但不编译其中包含的其他 protoc(google grpc assistant annotations.pb.h no file or directory error)

c# - 从 C# 调用非托管代码

c - 为什么不可分派(dispatch)句柄在 64 位平台上使用 ptr?

c - 避免 TIME_WAIT

c - 为什么我无法将此数组传递给函数并对其进行编辑?

javascript - 复杂的 JSON 结构与 JS

C++ Google Protocol Buffer 打开 http 套接字